淺談C語(yǔ)言中結(jié)構(gòu)體的初始化
更新時(shí)間:2013年05月23日 15:05:34 作者:
本篇文章是對(duì)C語(yǔ)言中結(jié)構(gòu)體的初始化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
《代碼大全》建議在變量定義的時(shí)候進(jìn)行初始化,但是很多人,特別是新人對(duì)結(jié)構(gòu)體或者結(jié)構(gòu)體數(shù)組定義是一般不會(huì)初始化,或者不知道怎么初始化。
1、初始化
typedef struct _TEST_T {
int i;
char c[10];
}TEST_T;
TEST_T gst = {1, “12345”};//可以初始化,設(shè)置i為1,s為一個(gè)字符串.
TEST_T gst = {1};//初始化個(gè)數(shù)少于實(shí)際個(gè)數(shù)時(shí),只初始化前面的成員。
TEST_Tgst = {.c=“12345”};//有選擇的初始化成員。
2、復(fù)合字面量。
gst = (TEST_T){122, "1256"};//這是一個(gè)賦值語(yǔ)句,也可以作為初始化??梢猿霈F(xiàn)在程序的任何地方。
當(dāng)然也可以使用復(fù)合字面量來(lái)初始化:
gst = (TEST_T){.i=122, .c="123"};
3、結(jié)構(gòu)體數(shù)組
可以用多個(gè)大括號(hào)括起來(lái):
TEST_T gst[10] = {{},{},{},{}}
也可以初始化其中的一個(gè)元素:
TEST_T gst[10] = {[2]={}, [3]={}}
也可以使用復(fù)合字面量:
TEST_T gst[10] = {[2].i=0, [3].i={}}
為什么要初始化:
1、對(duì)局部變量初始化可以防止隨機(jī)值產(chǎn)生的危害。
2、對(duì)全局變量初始化可以告訴編譯器,這是一個(gè)定義,而不是一個(gè)聲明。(如果兩個(gè)c中有相同的全局變量定義,且沒(méi)有初始化,編譯器會(huì)認(rèn)為第二個(gè)是聲明而不是定義。)
1、初始化
復(fù)制代碼 代碼如下:
typedef struct _TEST_T {
int i;
char c[10];
}TEST_T;
TEST_T gst = {1, “12345”};//可以初始化,設(shè)置i為1,s為一個(gè)字符串.
TEST_T gst = {1};//初始化個(gè)數(shù)少于實(shí)際個(gè)數(shù)時(shí),只初始化前面的成員。
TEST_Tgst = {.c=“12345”};//有選擇的初始化成員。
2、復(fù)合字面量。
gst = (TEST_T){122, "1256"};//這是一個(gè)賦值語(yǔ)句,也可以作為初始化??梢猿霈F(xiàn)在程序的任何地方。
當(dāng)然也可以使用復(fù)合字面量來(lái)初始化:
gst = (TEST_T){.i=122, .c="123"};
3、結(jié)構(gòu)體數(shù)組
可以用多個(gè)大括號(hào)括起來(lái):
TEST_T gst[10] = {{},{},{},{}}
也可以初始化其中的一個(gè)元素:
TEST_T gst[10] = {[2]={}, [3]={}}
也可以使用復(fù)合字面量:
TEST_T gst[10] = {[2].i=0, [3].i={}}
為什么要初始化:
1、對(duì)局部變量初始化可以防止隨機(jī)值產(chǎn)生的危害。
2、對(duì)全局變量初始化可以告訴編譯器,這是一個(gè)定義,而不是一個(gè)聲明。(如果兩個(gè)c中有相同的全局變量定義,且沒(méi)有初始化,編譯器會(huì)認(rèn)為第二個(gè)是聲明而不是定義。)
您可能感興趣的文章:
- C語(yǔ)言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況
- C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法
- C語(yǔ)言 結(jié)構(gòu)體(Struct)詳解及示例代碼
- 詳解C語(yǔ)言結(jié)構(gòu)體中的函數(shù)指針
- C語(yǔ)言 結(jié)構(gòu)體數(shù)組詳解及示例代碼
- C語(yǔ)言中的結(jié)構(gòu)體的入門學(xué)習(xí)教程
- C語(yǔ)言結(jié)構(gòu)體定義的方法匯總
- 深入理解C語(yǔ)言內(nèi)存對(duì)齊
- C語(yǔ)言、C++內(nèi)存對(duì)齊問(wèn)題詳解
- C語(yǔ)言中結(jié)構(gòu)體與內(nèi)存對(duì)齊實(shí)例解析
相關(guān)文章
C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例
這篇文章主要介紹了C語(yǔ)言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能,結(jié)合具體實(shí)例形式分析了C語(yǔ)言棧和隊(duì)列的定義及使用棧和隊(duì)列進(jìn)行回文檢測(cè)的操作技巧,需要的朋友可以參考下2017-06-06
c語(yǔ)言實(shí)現(xiàn)數(shù)組循環(huán)左移m位
這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)數(shù)組循環(huán)左移m位,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
利用C++求解八數(shù)碼問(wèn)題實(shí)例代碼
所謂八數(shù)碼問(wèn)題是指這樣一種游戲,將分別標(biāo)有數(shù)字1,2,3,…,8的八塊正方形數(shù)碼牌任意地放在一塊3×3的數(shù)碼盤上,放牌時(shí)要求不能重疊,下面這篇文章主要給大家介紹了關(guān)于利用C++求解八數(shù)碼問(wèn)題的相關(guān)資料,需要的朋友可以參考下2022-11-11
C++實(shí)現(xiàn)strcpy函數(shù)實(shí)例
這篇文章主要介紹了C++實(shí)現(xiàn)strcpy函數(shù)實(shí)例,步驟講解的很詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨小編一起來(lái)研究吧2020-12-12
vscode配置遠(yuǎn)程開發(fā)環(huán)境并遠(yuǎn)程調(diào)試運(yùn)行C++代碼的教程
這篇文章主要介紹了vscode配置遠(yuǎn)程開發(fā)環(huán)境并遠(yuǎn)程調(diào)試運(yùn)行C++代碼的教程,本文通過(guò)截圖實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
簡(jiǎn)單分析針對(duì)ARM平臺(tái)的C語(yǔ)言程序的編譯問(wèn)題
這篇文章主要介紹了針對(duì)ARM平臺(tái)的C語(yǔ)言程序的編譯問(wèn)題,從優(yōu)化編譯選項(xiàng)的幾個(gè)方面進(jìn)行分析,需要的朋友可以參考下2015-12-12
opencv3/C++圖像濾波實(shí)現(xiàn)方式
今天小編就為大家分享一篇opencv3/C++圖像濾波實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12

