在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)};//未初始化的将调用默认构造函数。如此时没有默认构造函数会出错。