C基礎 結構體成員初始化方式

2021-09-08 19:06:27 字數 1780 閱讀 9854

之前在linux核心**中看到結構體成員成員初始化使用類似於.owner = this_module, 不太見過,於是搜了個部落格,分享下:

**:1、前言

今天在公司看一同事寫的**,**中用到了struct,初始化乙個struct用的是亂序格式,如下**所示:

1 typedef struct

_data_t data_t;

56 data_t data =;

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 }

測試結果如下圖所示:

5、參考資料

C 結構體初始化

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

c 結構體初始化

在 系統程式設計師成長計畫 看到的,好像有點道理。宣告 struct s 習慣的初始化 struct s h 這種初始化是按結構體成員宣告的順序進行初始化的,即利用了struct記憶體布局的方法。若struct成員順序被修改了,初始化將引入隱患。幸運的話會收到編譯器的warning或error,否則...

C 結構體初始化

結構體初始化的三種方式 方式1using namespace std struct student int main void printf kyrie的名字 s 手機號 s 年齡 d n kyrie.name,kyrie.phone.c str kyrie.age return0 方式2 有的編譯...