結構體初始化我們經常會用到,使用未初始化的結構體,結果是不可預估的
下面介紹幾種常用的結構體初始化方式:
1、結構體內分別初始化
typedef struct stTemp
{
int nName;
int nType;
char arrayTemp[50];
stTemp():nName(-1),nType(-1) //構造函數初始化列表
//也可用 struct stTemp():nName(-1),nType(-1)
//但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;