Linux下C結構體初始化 總結

2022-06-26 03:09:11 字數 1574 閱讀 8865

**

總結下:

結構體的初始化方式有兩種:

順序初始化:data_t data=

亂序初始化:oper oper_two =

linux下c結構體初始化[總結]

1、前言

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

複製**

typedef struct _data_t data_t;

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 * ******************************/

56 #include

78 //函式指標

9 typedef int (caculate_cb)(int a, int b);

10 //結構體定義

11 typedef struct _oper oper;

16 //加法函式定義

17 int add(int a, int b)

18 21

22 int main()

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);

45 return 0;

46 }

複製**

測試結果如下圖所示:

Linux下C結構體初始化 總結

1 前言 今天在公司看一同事寫的 中用到了struct,初始化乙個struct用的是亂序格式,如下 所示 typedef struct data t data t data t data 2 順序初始化教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必須...

Linux下C結構體初始化 總結

1 前言 今天在公司看一同事寫的 中用到了struct,初始化乙個struct用的是亂序格式,如下 所示 typedef struct data t data t data t data 2 順序初始化教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必須...

Linux下C結構體初始化

1 前言 今天在公司看一同事寫的 中用到了struct,初始化乙個struct用的是亂序格式,如下 所示 typedef struct data t data t data t data 2 順序初始化 教科書上講c語言結構體初始化是按照順序方式來講的,沒有涉及到亂序的方式。順序初始化struct必...