最近看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
從結果看確實都可以初始化成功。
最後看下陣列索引初始化方式:
1struct
st_al2;
67struct st_al sa =8,
13 [1] = ,
14},
15 };
驗證也是通過的!但其實索引後接的內容也是形如順序初始化。。。。
最後寫乙個陷阱,不要混用不同的初始化方式,以免帶來意料之外的錯誤
1第5行其實相當於 .c = 3struct al_data ad2 =
2;
沒有初始化的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...