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

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

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

最佳答案

你那个第一种做法叫初始化,C语言允许结构体初始化,但不允许第二种那样赋值
如果你写
struct student
{
     int a;
     int b;
     
     };
struct student a={1,2};
也是对的,这就叫初始化 
至于怎么样才能做到直接赋值,C语言里面并没有这样的操作
重载操作符也是C++里面的了
不过你可以这样struct student b={1,2};a=b;
C语言里面2个结构体之间是可以复制的
或者你也可以定义一个函数来做,函数体里面要用挨个赋值的方式