结构体初始化我们经常会用到,使用未初始化的结构体,结果是不可预估的
下面介绍几种常用的结构体初始化方式:
1、结构体内分别初始化
typedef struct stTemp
{
int nName;
int nType;
char arrayTemp[50];
stTemp():nName(-1),nType(-1) //构造函数初始化列表
//也可用 struct stTemp():nName(-1),nType(-1) vs2015可用
//但struct关键字部分编译器不识别
{
memset(arrayTemp,0,sizeof(arrayTemp));
}
}STT;
//或
typedef struct stTemp
{
int nName;
int nType;
char arrayTemp[50];
stTemp()
{
nName = -1;
nType = -1;
memset(arrayTemp,0,sizeof(arrayTemp));
}
}STT;
2、结构体内整体初始化
typedef struct stTemp
{
int nName;
int nType;
char arrayTemp[50];
stTemp()
{
memset(this,0,sizeof(stTemp));
}
}STT;
3、定义变量时初始化
typedef struct stTemp
{
int nName;
int nType;
char arrayTemp[50];
}STT;
STT stMy = {0};
4、用结构体指针分别初始化
很多时候,结构体指针就是结构体内第一个元素的指针,所以有时候可以这样初始化:
typedef struct stBase
{
int id;
int width;
int height;
const char *name;
}STBASE;
typedef struct stTemp
{
STBASE a;
STBASE b;
STBASE c;
const char name[3][16] = {{"中国"},{"美国"},{"英国"}};
struct stTemp ()
{
STBASE *val = 0;
val = (STBASE*)this;
for(int i=0; i<3; ++i)
{
val->id = 0;
val->width = -1;
val->height = -1;
val->name = name[i];
++val;
}
}
}STT;