C語言結構體的初始化

2021-07-01 20:11:28 字數 552 閱讀 3567

今天在工作時,看到了奇葩的結構體初始化方式,於是我查了一下c99標準文件和gcc的說明文件,終於搞清楚是怎麼回事了。

假設有如下結構體定義:

typedef struct

mystruct;

那麼結構體的初始化方式如下有三種:

(1) c89的初始化方式

mystruct test = ;
這種初始化的優點是語法簡單,無需輸入變數名;缺點是成員變數的初始化順序必須與宣告的一致,無法亂序初始化。

(2) c99新增的「指定初始化列表」(designated initializers)的初始化方式

mystruct test = ;
這種初始化的優點是可以亂序初始化;缺點是語法略微複雜,要打變數名。

(3) gcc的初始化方式(gnu擴充套件,非標準)

mystruct test = ;
與上一種相同,優點可亂序初始化;缺點語法略微複雜。另外還有乙個缺點——非標準,可移植性差。

C語言結構體初始化

1 2 test.c 3 2018 1 30 4 5 include 6 7 struct studen 12 13 14 15 int main void 16 19 20 number two 先定義再乙個個初始化 21 struct studen std2 22 std2.id 120 23 ...

C 結構體初始化

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

c 結構體初始化

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