結構體亂序初始化

2021-07-30 09:55:31 字數 1445 閱讀 1634

2、順序初始化

教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必須要按照成員的順序進行,缺一不可,如果結構體比較大,很容易出現錯誤,而且表現形式不直觀,不能一眼看出各個struct各個資料成員的值。

3、亂序初始化

亂序初始化是c99標準新加的,比較直觀的一種初始化方式。相比順序初始化而言,亂序初始化就如其名,成員可以不按照順序初始化,而且可以只初始化部分成員,擴充套件性較好。linux核心中採用這種方式初始化struct。

亂序初始化有兩種方式,一種是用點(.)符號,一種是用冒號(:)。方式1是c99標準,方式2是gcc的擴充套件,強烈建議使用第一種方式。

4、測試程式

1

/*********************************

2* linux下c語言結構體初始化方法

3* @author anker @date:2014/02/11

4* *******************************/5

6 #include 78//

函式指標

9 typedef int (*caculate_cb)(int a, int

b);10

//結構體定義

11 typedef struct

_oper oper;

16//

加法函式定義

17int add(int a, int

b)18

2122

intmain()23;

27//

亂序初始化結構體2

28 oper oper_two =;

33//

亂序初始化結構體3

34 oper oper_three =;

39 ret =oper_one.cal_func(oper_one.a, oper_one.b);

40 printf("

oper_one caculate: ret = %d\n

", ret);

41 ret =oper_two.cal_func(oper_two.a, oper_two.b);

42 printf("

oper_two caculate: ret = %d\n

", ret);

43 ret =oper_three.cal_func(oper_three.a, oper_three.b);

44 printf("

oper_three caculate: ret = %d\n

", ret);

45return0;

46 }

測試結果如下圖所示:

結構體初始化 指定初始化

參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...

結構體初始化

結構體變數初始化 tag 結構體,結構體變數,結構體變數宣告,結構體變數初始化,結構體變數引用,結構體成員變數引用 text c語言中引用變數的基本原則是在使用變數前,需要對變數進行定義並初始化。其方法是在定義變數的同時給其一初始值。結構體變數的初始化,遵循相同的規律。簡單變數的初始化形式如下 資料...

C 結構體初始化

今天在看mfc結構時,順便看了看 深入淺出mfc 發現有這麼一行 m pmainwnd new cmyframewnd 乍一看,很正常啊,再仔細一看,貌似 new cmyframewnd 的時候少了一對括號。奇怪!之後又翻了翻書,發現好多處都是這樣的。難道我弄錯了,不可能啊,一般情況下在new乙個新...