C和C++结构体的初始化和赋值

C中结构体是数据的集合,比较简单。初始化和赋值方式如下(CPP代码,VS编译器):

typedef struct MyStruct1
{
int a;
int b;
int c;
int d;
}My1;
typedef struct MyStruct
{
int a;
int b;
int c;
int d;
My1 so;
}My;
int _tmain(int argc, _TCHAR* argv[])
{
My temp = { 1, 2, 3, 4, { 1, 2, 3, 4 } };//定义初始化,第一种
temp = { 1, 2, 3, 4, { 2, 2, 3, 4 } };//赋值, 第二种
memset(&temp, 0x00, sizeof(My));//置零, 第三种

My temp1 = temp;//初始化,相同结构体类型, 第四种

My temp2 = {0};//初始化, 第五种

temp.a = 1;//单个成员赋值, 第六种
temp.b = 2;
temp.c = 3;
temp.d = 4;

return 0;
}

以上,基本数据成员为内置类型。

当数据成员包含非内置类型时,有些场景  第五种  方式编译不通过,这个可以在编译时发现及修正,不做举例。


=========================================================================================


C++内结构体性质同类,只是某些属性不一致。初始化和赋值方式如下(CPP代码,VS编译器):

typedef struct MyStruct1
{
int a;
int b;
int c;
int d;
}My1;
typedef struct MyStruct
{
MyStruct()
{
a = 4;
}
int a;
int b;
int c;
int d;
My1 so;
}My;
int _tmain(int argc, _TCHAR* argv[])
{

//My结构体类型包含构造函数,等效于类对象的初始化和赋值
My temp = { 1, 2, 3, 4, { 1, 2, 3, 4 } };//失败
temp = { 1, 2, 3, 4, { 2, 2, 3, 4 } };//失败
memset(&temp, 0x00, sizeof(My));//此处成功, 需慎用

My temp1 = temp;//成功
My temp2 = {0};//失败

temp.a = 1;//成功
temp.b = 2;
temp.c = 3;
temp.d = 4;


//My1类内只有数据成员

My1 temp5 = { 1, 2, 3, 4 };//成功
temp
5 = { 1, 2, 3, 4 };//成功
memset(&temp
5, 0x00, sizeof(My1));//成功

My
1 temp3 = temp5;//成功
My
1 temp4 = {0};//成功

return 0;
}

以上样例比较简单,实际情况最好查看内存分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值