c语言为什么结构体声明的时候可以直接赋值,后面的就不行

struct student
{
int a;
int b;

}a={1,2},b;//正确
_________________________
struct student
{
int a;
int b;

}a,b;
a={1,2}; //错误

这样不行的话有没有什么简便的定义方法

声明的时候和后续赋值略有不同,在C语言中是两种处理方法。
如有结构体
struct test
{
int a;

char c;

int b;

};
定义的时候,可以

struct test var = {1,'c', 2};
这样初始化,结果为var.a = 1, var.c = 'c', var.b = 2;
但是如果后续赋值
var = {1,'c', 2};
就会报错。因为在C语言中不支持这种形式的操作。
不过可以取巧转换一下,改成
var = (struct test){1,'c', 2};
这样就可以了。 在这种情况下,系统会申请一个临时变量,并初始化为该值,再对var进行赋值。而同类型结构体之间赋值操作是C语言规则允许的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-24
这个涉及到一个临时变量的问题,因为后面的a={1,2}; 不在结构体定义里面了,出了这个结构体系统就无法识别了,所以会提示错误。追问

那要怎么办 一个一个定义太麻烦了吧吧

追答

这个语法就是这样定义的,暂时还没简便方法吧。

第2个回答  推荐于2017-09-14
你那个第一种做法叫初始化,C语言允许结构体初始化,但不允许第二种那样赋值
如果你写
struct student
{
int a;
int b;

};
struct student a={1,2};
也是对的,这就叫初始化
至于怎么样才能做到直接赋值,C语言里面并没有这样的操作
重载操作符也是C++里面的了
不过你可以这样struct student b={1,2};a=b;
C语言里面2个结构体之间是可以复制的
或者你也可以定义一个函数来做,函数体里面要用挨个赋值的方式
希望对你有帮助本回答被提问者采纳
第3个回答  2011-04-24
语法规定,这个好像没原因可说

要赋值的话,你可以这样 a.a=1;相信你也知道追问

那有简便的定义方法吗

追答

语法规定吧,更简单的不知道

第4个回答  2011-04-25
重载操作符。
相似回答