结构体变量赋值与初始化的区别:结构体数组单独赋值报错原因
为什么结构体数组元素单独赋值会报错?
嘿,这个问题其实是C语言里初始化和赋值的语法规则差异搞的鬼,咱们一步步拆解清楚:
错误原因分析
你写的第2行代码:
newitem[0]={1,"pen",5,10};
这属于赋值操作——你已经先声明了newitem数组,现在想给其中一个元素赋值。但C语言的语法规则里,{...}这种初始化列表的写法,只能用在变量声明的同时进行初始化的场景,不能用来给已经存在的变量(包括数组元素)直接赋值,所以编译器会抛出expected expression before '{' token的错误。
而第3行的代码:
struct item new2= {2,"ygh",9,0};
这是初始化操作——在声明new2这个结构体变量的同时,用初始化列表给它赋值,这完全符合C语言的语法要求,所以编译器不会报错。
解决方法
如果想给数组里的结构体元素赋值,有几种可行的方式:
1. 声明数组时直接初始化
如果在声明数组的时候就知道初始值,可以直接用初始化列表批量初始化:
struct item newitem[10] = { {1,"pen",5,10}, // 给newitem[0]初始化 {2,"ygh",9,0}, // 给newitem[1]初始化 // 未指定的元素会被自动初始化为0/空值 };
2. 逐个成员赋值
针对已经声明的数组元素,你可以逐个给结构体的成员赋值(注意字符串不能直接赋值,要用strcpy):
struct item newitem[10]; newitem[0].id = 1; strcpy(newitem[0].name, "pen"); // 字符串需要用strcpy复制 newitem[0].price = 5; newitem[0].stock = 10;
3. 用临时结构体变量赋值
先创建一个临时的结构体变量并初始化,再把它赋值给数组元素(结构体变量之间可以直接赋值):
struct item newitem[10]; struct item temp = {1,"pen",5,10}; newitem[0] = temp;
内容的提问来源于stack exchange,提问作者ram
相关产品推荐
相关产品推荐

