结构体struct的初始化
2014-02-03 22:25
232 查看
在C语言中,对结构体的初始化,可以有一下三种。
struct test
{
int a;
int b;
};
int main()
{
struct test
t1 = {0, 0};
struct test t2 = {
.a=2,
.b=3
};
struct test 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);
return 0;
}
第一种使我们最常见的方式,2,3中是gcc的扩展,非标准。
而在C++当中,若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。
注意:
① 不论值的个数多少,都必须使用花括号定界
② 未指定值的数据成员编译器会自动初始化为默认值
③ [b]这种初始化对象方式,要求所有数据成员必须为public型
④ 这种初始化对象方式,要求类中不能编写任何构造函数[/b]
struct S { //class S 效果一样
int x;
unsigned short y;
};
S testS1={100,123};
S testS2={200};//未指定值的数据成员初始化为默认值,这里os2.y=0;
S TestS[4]={ {100,10},
{200,20},
{300} };//未指定值的初始化为默认值,os[2].y,os[3].x,os[3].y。
若数据成员有private或protected型,或是提供了构造函数,必须使用构造函数来进行初始化。
struct S { //class S可自行试验,结果相同
private:
int x;
public:
double y;
S(void){}
S(int idemo,double ddemo) {x=idemo;y=ddemo;}
void show(void) {cout<<x<<''\t''<<y<<endl;}
};
S os1;//将调用默认构造函数(无参构造函数)
S os2(1000,2.345);
S os3=S(2000,4.567);
S os[4]={S(10,1.234),S(20,2.234)};//未初始化的将调用默认构造函数。如此时没有默认构造函数会出错。
struct test
{
int a;
int b;
};
int main()
{
struct test
t1 = {0, 0};
struct test t2 = {
.a=2,
.b=3
};
struct test 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);
return 0;
}
第一种使我们最常见的方式,2,3中是gcc的扩展,非标准。
而在C++当中,若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。
注意:
① 不论值的个数多少,都必须使用花括号定界
② 未指定值的数据成员编译器会自动初始化为默认值
③ [b]这种初始化对象方式,要求所有数据成员必须为public型
④ 这种初始化对象方式,要求类中不能编写任何构造函数[/b]
struct S { //class S 效果一样
int x;
unsigned short y;
};
S testS1={100,123};
S testS2={200};//未指定值的数据成员初始化为默认值,这里os2.y=0;
S TestS[4]={ {100,10},
{200,20},
{300} };//未指定值的初始化为默认值,os[2].y,os[3].x,os[3].y。
若数据成员有private或protected型,或是提供了构造函数,必须使用构造函数来进行初始化。
struct S { //class S可自行试验,结果相同
private:
int x;
public:
double y;
S(void){}
S(int idemo,double ddemo) {x=idemo;y=ddemo;}
void show(void) {cout<<x<<''\t''<<y<<endl;}
};
S os1;//将调用默认构造函数(无参构造函数)
S os2(1000,2.345);
S os3=S(2000,4.567);
S os[4]={S(10,1.234),S(20,2.234)};//未初始化的将调用默认构造函数。如此时没有默认构造函数会出错。
相关文章推荐
- C语言中结构体(struct)乱序初始化
- linux C 结构体struct的定义和初始化
- Cstring使用问题和struct结构体初始化方法汇总
- 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化
- Cstring使用问题和struct结构体初始化方法汇总
- struct结构体的初始化及typedef的理解总结
- C语言中结构体(struct)的初始化
- struct结构体初始化3种方法
- 088.Init Struct 初始化结构体
- struct结构体初始化3种方法
- 谈结构体struct 初始化多出的点号“.”,数组[]初始化多出的逗号“,”
- 结构体初始化的方法——关于struct file_operations
- C语言中结构体(struct)的初始化
- struct 结构体的定义及初始化问题
- 结构体struct 成员值初始化
- struct结构体初始化
- 088.Init Struct 初始化结构体
- C语言中结构体(struct)的几种初始化方法
- 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化
- 变量的默认初始化、struct结构体提醒