精华内容
下载资源
问答
  • C语言 变量、数组结构体中的赋值

    千次阅读 2019-05-16 10:52:04
    C语言指针-赋值篇问题来源变量赋值数组赋值结构体赋值 今天主要就是一个 关于 C语言变量、数组、结构体等 赋值的一篇文章 问题来源 今天有个同学问了我一个问题? ![定义了一个结构体]...


    今天主要就是一个 关于 C语言变量、数组、结构体等 赋值的一篇文章

    问题来源

      今天有个同学问了我一个问题?    
    ![定义了一个结构体](https://img-blog.csdnimg.cn/20190516095846653.png),    
    student.name =  "abcd";   为什么是错的?为什么不能赋值?应该怎么赋值?
    

    那么小编我呢,看了半天,终于总结出一篇关于这个问题的 一篇文章。

    变量赋值

    int main(void){
         int a = 0;
         a = 1;
        char ch = 'a';
        ch = 97;
       return 0;  
    }
    e:\Workspace\VSCode\test>gcc h.c      可以编译,没有出错。
    

    基本数据类型(int 、double、char等)的变量都可以, 初始化进行赋值和 “再次
    赋值

    数组赋值

    int main(void){
    char str[20] = "abcd";
    str = "qwer";
    str[0] = '1';
    }
    

    常见的赋值我就不写了。

    这次编译就出现了错误
    e:\Workspace\VSCode\test>gcc h.c
    h.c: In function ‘main’:
    h.c:5:9: error: assignment to expression with array type
    str = “qwer”;

    这个是为什么,基本数据类型变量可以,但是数组出错了???
    小编先不急说为什么出错,咱们再接着看。

    结构体赋值

    int main(void){
    struct students{
          int id;
          char name[10];
    };
    struct students bao = {};
    bao.name = "abcd"; //error
    或者 char str[20] = ""asdf;
         bao.name =  str;//这种也是error
     
     当然编译也是出错了。
    

    1、这是网上大神关于 C编译器 的解释。

    在初始化字符数组时,编译器会给字符数组首元素赋予初始地址。而后再另外给字符数组赋值字符串,此时字符数组已经具有地址,编译器就会以为是你要给字符数组某个元素赋值。所以说此时是可以给单个字符数组元素赋值单个字符的,但是不可以赋值字符串

    2、这个是容易点理解的。

    数组名(str)不可以做左值, 因为他是一个常量,你怎么能够把一个地址值赋值给你个常量呢?

    大家可以结合两个理解一下。

    接下来我就把我处理这个问题的过程代码放在这,供大家理解和参考,(注释都是运行过的)

    struct students
    {
    int id;
    char name[10];
    };

    int main(void){
    struct students bao = {};
    printf("%d, %s\n", bao.id, bao.name);  // 输出是4224528,空(应该是null)
    // struct students bao = {3, "123"};可以。第一种赋值方法
    
    // strcpy(bao.name, "bao"); //可以,
    // printf("%d, %s\n", bao.id, bao.name);
    
    // bao.name = "bao";  错误  “stray '\351' in program”其他是乱码,
    
    // bao.name[0] = 'a'; 
    // bao.name[0] = '/0';
    // printf("%d, %s\n", bao.id, bao.name);
    /* 这样可以,*/
    
    // char arr[10] = "baobao";
    // //bao.name = arr;  //error "assignment to expression with array type"
    
    // scanf("%s", bao.name); //可以,
    // printf("%d, %s\n", bao.id, bao.name);
    //所以scanf那一类函数都可以。
    
    // 还有就是memcpy函数  也是可以的
    
    
    return 0;
    }
    

    欢迎关注公众号:

    在这里插入图片描述

    展开全文
  • ``` typedef struct _Teacher{ char name[20]; int age; }Teacher; void main(){ Teacher t1; t1.age=20; t1.name="abc";//报错为什么?...是分配内存放在全局区,还是当做字面值
  • c语言数组赋值结构体赋值高阶用法 #include <stdio.h> #define N 8 int a[] = {0, 1, 2, 3, 4, 5, 6, 7}; int b[N] = {0, 1, 2, 3, 4}; int c[N] = { [0 ... 3] = 233, 9, [5 ... 6] = 666 }; int d[N] =...

    c语言数组及结构体常用赋值方法

    #include <stdio.h>
    #define N 8
    int a[] = {0, 1, 2, 3, 4, 5, 6, 7};
    int b[N] = {0, 1, 2, 3, 4};
    int c[N] = {
        [0 ... 3] = 233,
        9,
        [5 ... 6] = 666
    };
    int d[N] = {233};
    int e[] = { [0 ... 7] = 233 };
    int f[N] = {0};
    int g[N] = {};
    struct tt {
        int a;
        int b;
    };
    
    void print_list(int *list, int n) { int i; for (i = 0; i < n; ++i) { printf("%d ", list[i]);  }; printf("\n"); }
    int main(int argc, char** argv) {
        print_list(a, N);
        print_list(b, N);
        print_list(c, N);
        print_list(d, N);
        print_list(e, N);
        print_list(f, N);
        print_list(g, N);
        struct tt test = {
            .a = 233
        };
        printf("tt a: %d b: %d\n", test.a, test.b);
        return 0;
    }
    

    输出结果:

    0 1 2 3 4 5 6 7  // 数组a的初始化
    0 1 2 3 4 0 0 0  // 数组b的初始化
    233 233 233 233 9 666 666 0  // 数组c的初始化
    233 0 0 0 0 0 0 0  // 数组d的初始化
    233 233 233 233 233 233 233 233  // 数组e的初始化
    0 0 0 0 0 0 0 0  // 数组f的初始化
    0 0 0 0 0 0 0 0  // 数组g的初始化
    tt a: 233 b: 0  // 结构体的初始化
    
    展开全文
  • name:数组&&结构体的一些小插曲(数组名,结构体名,整体赋值...)  */  #include int main() { char c1[3]={'a','b','c'}; /*c1[3]={'a','b'};这样不行 why ?so easy! c1[3] 是数组c1的第2个元素。*/  ...
    /*
    name:数组&&结构体的一些小插曲(数组名,结构体名,整体赋值...) 
    */ 


    #include <stdio.h>


    int main()
    {


    char c1[3]={'a','b','c'};
    /*c1[3]={'a','b'};这样不行 why ?so easy! c1[3] 是数组c1的第2个元素。*/ 
    char c2[3];
     
    printf("c2=%d\n",c2);/*10485296*/
    printf("c1=%d\n",c1);/*10485312*/
    /*c2=c1;  不能这样给数组赋值  why?  
     printf("c2=%d\n",c2); 结果:10485296
     printf("c1=%d\n",c1);  结果:10485312
     c1与c2都是常量(具体为 :指针常量),自然就无法相互赋值===
       ==>这也说明了 语句:char c2[3];已经分配出了固定空间来存储c2数组 
       
    */
     
     struct A{
      int x;
     
     }a1,a2;
     a1.x=1;
     a2.x=2;
     
     printf("a1=%d   a2=%d\n",a1,a2); 
     printf("a1.x=%d   a2.x=%d\n",a1.x,a2.x);
     
     a2=a1;
     /*没毛病 why?
     ***前方高能*** 
     struct A{
      int x;
     }a1,a2;
     <===> 
     struct A a1,a2;与常规定义变量语句类比下:
        struct A   a1,a2;
    VS     int     x,y; 
    !!!想必帅哥美美们已经get到精华了:
    没错,就是把struct A 看成我们自定义的一种c语言数据类型,这也与typedef呼应 ,
    那么 a1=a2 还有问题吗? 
     */ 
     
     printf("a1=%d   a2=%d\n",a1,a2); 
     printf("a1.x=%d   a2.x=%d\n",a1.x,a2.x);
     /*
     more:
    1.数  组    char      c1[3] ;


    2.结构体    struct A  a1;
    3.常  规    int       x;
    ------------------------------------------------------------------------------------------------------------------- 
    2,3看成一类;
    1特殊  c1就是数组c1[0]的地址值 ,a1,x的地址为&a1,&x;
     
     */ 
      
    return 0;
    展开全文
  • 最近在看关于队列调度的内核实现代码时,发现奇怪的赋值语句,写此文章记录下。
  • 给char数组或者结构体赋值

    千次阅读 2016-04-19 14:28:41
    首先,定一个一个结构体 struct ControlWindowMsg{  unsigned char buf1;  unsigned char buf2;    unsigned char buf3;    unsigned char buf4;   };
    首先,定一个一个结构体
    

    struct ControlWindowMsg{

        unsigned char       buf1;

        unsigned char       buf2;

        

        unsigned char buf3;

        

        unsigned char       buf4;

        

    };


    定义一个char类型字符数组,并且赋值

     char buf[4] = {0};

        

        buf[0] = 1 & 0xff;

        buf[1] = 0 & 0xff;

        buf[2] = 3 & 0xff;

        buf[3] = 104 &0xff;


    然后,将buf中的内容赋值给结构体

     struct ControlWindowMsg windowMsg;

        

        memset(&windowMsg, 0, sizeof(windowMsg)); //结构体赋值为0

        memcpy(&windowMsg, buf, sizeof(windowMsg)); //结构体赋值


    通过打印可以发现,windowMsg赋值成功


    ps:顺便添加一点

     NSTimeInterval timeInerval = [[NSDate date] timeIntervalSince1970];

        int taskId = [[NSString stringWithFormat:@"%f",timeInerval] intValue];

        

        buf[2] = taskId & 0xff;

        

        buf[3] = (taskId >> 8) & 0xff;

        

        buf[4] = (taskId >> 16) & 0xff;

        

        buf[5] = (taskId >> 24) & 0xff;


    如果taksId是占四个字节的,给buf数组赋值的时候这样赋值


    展开全文
  • 创建了一个大型的结构体,里面有许多子结构体,创建成功之后,使用全局指针指向其中一个子结构体,并创建了一个子结构体类型的实例进行,*指针=实例赋值。 如果子结构体中的数组小于2000个,不会崩溃,再大就会崩溃...
  • 三个老师,每个老师带五个学生,老师是一个数组,每个老师带的五个学生又是一个数组。 #include <iostream> #include<string> using namespace std; //学生结构体 struct student{ string name; int ...
  • 我第一个想法就改成结构体 数组类型 typedef struct { char *szbuff; DWORD address; }SHELL_CODE; 但是这样我取结构体长度 就不方便了 [img=...
  • 1、多维数组第三维称为...这样就得到的A三维数组为2*2*3double2、结构体数组(我学这个的目的是为了将不同维度的二维数组存放在一块,将不同的二维数组赋值给新的数组,方便循环遍历)结构体数组定义--赋值方式或者用...
  • 如果有多个成员那这样怎么确定是在给数组赋值,也没有取到m,而且还多了一对大括号,不了解的奇奇怪怪的语法又增加了,好想知道原因或者相关知识点语法~ #include<iostream> using namespace std; struct mat{...
  • 单元数组结构体的区别在于,结构体中的数据存储并不是由数字来标示的,而是通过结构体中的名称进行标示的。 单元数组的创建和操作 单元数组中每一个元素成为单元(cell),单元中可以包含任何类型的MATLAB数据,即...
  • 1、多维数组第三维称为...这样就得到的A三维数组为2*2*3double2、结构体数组(我学这个的目的是为了将不同维度的二维数组存放在一块,将不同的二维数组赋值给新的数组,方便循环遍历)结构体数组定义--赋值方式或者用...
  • 结构体名 为什么不能用数组名给数组赋值结构体却可以 c1,c2是两个指针常量,只能进行一次赋值 struct A 是自定义的一种数据类型,这里的a1 = a2 就如同typedef这样,起一个别名 地址传参,为什么数组中...
  • 结构体数组却可以写成“指针名 = 结构体变量名” 。   观点1论证:单个结构体是不能写成“指针名 = 结构体变量名”的, 例如 pstu = stu1 是错误的,必须写成 pstu = &amp;stu1 。 见下面的程序 #include...
  • printf("结构体数组调用赋值测试数据:%d,%c\n",arr[i].num,arr[i].null); } //结构体函数赋值的使用④  meed.p(); } ******************************************/ /****************************...
  • 构造类型:数组结构体、共用体、枚举类型 1、数组:相同类型的变量排成一列所构成的变量集。  定义:int B[100]; //长度为100,存储范围0~99  赋值:int A[5] = {9,3,2,1,5};  存取: a = A[0];  A...
  • 数组结构体趣谈

    2018-11-28 11:15:00
    C语言中的一等公民和二等公民:一等公民可以作为参数,可以作为返回值,可以直接以变量或这结构体存储,运行中可以重构,唯一识别,可以直接赋值拷贝: can be stored in variables and data structures can be ...
  • 数组定义: char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0}; 结构体定义: typedef struct { int iOne; int iTwo; int iThr; }TRANS_HEAD_S; typedef struct { int iUser; }USER.....
  •  一直以来,初始化变量和数组常采用定义时赋值的方法,今天在定义一个结构体的时候发现了一些问题,查了下相关资料发现以往的使用确实有些误区,一直没有注意到,于是搜集了下零散的资料在此记录一下。 一、以往...
  • 数组有如下用法:例如: int name[10]={0};作为右值:name本身可以作为数组首元素的地址,等同于&name[0],取数组第一个元素的地址。可以明确的是,name即使有意义,也是作为指针存在,而不是代表整个数组作为...
  • 数组结构体的初始化

    千次阅读 2018-12-14 13:13:58
     一直以来,初始化变量和数组常采用定义时赋值的方法,今天在定义一个结构体的时候发现了一些问题,查了下相关资料发现以往的使用确实有些误区,一直没有注意到,于是搜集了下零散的资料在此记录一下。 一、以往...
  • # 一、二维数组 二维数组的用法与我们已经掌握的一维数组一样,今天我们主要讲的是二维数组的初始化问题。 **一.分行进行初始化** ```cpp int x[3][3]={{1,2,3},{4,5,6},{7,8,9}} // 第一行 第二行 第三行 ``` **...
  • C语言中表达数据的基本类型时,用基本数据类型描述,例如整型,字符型,浮点型。... 讲数组的赋值前,我们先来普及区分一组定义:数组声明、数组初始化、数组赋值。数组声明:就是为数组将要申请的内存空间...
  • C语言中表达数据的基本类型时,用基本数据类型描述,例如整型,字符型,浮点型。... 讲数组的赋值前,我们先来普及区分一组定义:数组声明、数组初始化、数组赋值。数组声明:就是为数组将要申请的内存空间...
  • 含有数组结构体或类的赋值

    千次阅读 2012-04-24 19:56:23
    比如 struct st { char array[256]; } //使用的时候 st a; a.array[0] = '0'; a.array[1] = '0'; a.array[2] = '0';... //是可以直接赋值的,赋值后b里的array数据和a是相同的 脑子里一直以为
  • C中的数组结构体

    2014-04-12 19:52:22
    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题。那么就总结一下C语言中...
  • clear A % 保证赋值的单元数组名称不重名 >>%按单元索引法赋值 >>A(1,1)={[1 3 5;2 4 6; 1 4 7]}; >>A(1,2)={3+5i}; >>A(2,1)={'Tsinghua in Beijing'}; >>A(2,2)={0:pi/5:pi}; >&...
  • 数组不能单独整体赋值,但却能在结构体(例如仅包含一个数组)中被整体赋值。 测试发现,至少存在某些情况,该数组和对应的结构体占用相同大小的内存。(好吧,其实我就测试了一组) 于是,我想问:这么实现,是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,316
精华内容 526
关键字:

数组赋值结构体