在C语言中,对结构体的初始化,可以有一下三种。

structtest
 {
     inta;
     intb;
 };
intmain()
 {
    structtest t1={0,0}; 
     structtest t2={ 
         .a=2, 
         .b=3
     };  
     structtest t3={ 
         a:12345,
         b:567890
     };  
     printf("t1.a = %d, t1.b = %d\n", t1.a, t1.b);
     printf("t2.a = %d, t2.b = %d\n", t2.a, t2.b);
     printf("t3.a = %d, t3.b = %d\n", t3.a, t3.b);
     return0;
 }

第一种使我们最常见的方式,2,3中是gcc的扩展,非标准。

在C++当中,若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。
注意:
① 不论值的个数多少,都必须使用花括号定界
② 未指定值的数据成员编译器会自动初始化为默认值
③ 这种初始化对象方式,要求所有数据成员必须为public型
④ 这种初始化对象方式,要求类中不能编写任何构造函数

struct S { 
   int           
  
};
S testS1={100,123};
S testS2={200};//未指定值的数据成员初始化为默认值,这里os2.y=0;
S TestS[4]={ {100,10},


           


若数据成员有private或protected型,或是提供了构造函数,必须使用构造函数来进行初始化。
struct S { //class S可自行试验,结果相同
        

};
S os1;//将调用默认构造函数(无参构造函数)
S os2(1000,2.345);
S os3=S(2000,4.567);
S os[4]={S(10,1.234),S(20,2.234)};//未初始化的将调用默认构造函数。如此时没有默认构造函数会出错。