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 };//成功
temp5 = { 1, 2, 3, 4 };//成功
memset(&temp5, 0x00, sizeof(My1));//成功
My1 temp3 = temp5;//成功
My1 temp4 = {0};//成功
return 0;
}
以上样例比较简单,实际情况最好查看内存分析。