C++/Qt結構體初始化

結構體初始化我們經常會用到,使用未初始化的結構體,結果是不可預估的
下面介紹幾種常用的結構體初始化方式:

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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章