Linux C 結構體初始化三種形式

2022-03-31 02:12:47 字數 1018 閱讀 8557

最近看linux**時發現了結構體 struct 一種新的初始化方式,各方查詢對比後總結如下:

1. 順序初始化

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

2.亂序初始化

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

目前看到3種不同的亂序初始化方式:

一是用點(.)符號, 二是用冒號(:), 三是當字段是陣列時可使用索引初始化。

1 typedef struct

al_data

2al_data;89

struct al_data ad =10;

1617

struct al_data ad2 =18;

2425

struct al_data ad3 =26;

3233

34int

main()

35

上面是順序初始化和前兩種亂序初始化。

從結果看確實都可以初始化成功。

最後看下陣列索引初始化方式:

1

struct

st_al2;

67struct st_al sa =8,

13 [1] = ,

14},

15 };

驗證也是通過的!但其實索引後接的內容也是形如順序初始化。。。。

最後寫乙個陷阱,不要混用不同的初始化方式,以免帶來意料之外的錯誤

1

struct al_data ad2 =

2;

第5行其實相當於  .c = 3 

沒有初始化的a賦值為了0,但不是絕對的,需要0還是手動賦值!

結構體初始化三種方法

方法 一 定義時賦值 include struct age struct student int main void 100 return 0 方法 二 定義後賦值 include include struct age struct student int main void 方法 三 建構函式初始...

初始化三種方式

陣列的初始化方式總共有三種 靜態初始化 動態初始化 預設初始化。下面針對這三種方式分別講解。1.靜態初始化 除了用new關鍵字來產生陣列以外,還可以直接在定義陣列的同時就為陣列元素分配空間並賦值。示例7 4 靜態初始化陣列 inta 靜態初始化基本型別陣列 man mans 靜態初始化引用型別陣列 ...

結構體初始化 指定初始化

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