當定義一個結構物件時,如果想顯式地初始化它,必須使用初始化列表:該列表放在一組大括號內,以逗號分隔各初始化器(initializer)或者個別結構成員的初始值。
初始化器和成員宣告時的順序有關:第一個初始化器被關聯到第一個成員,第二個初始化器被關聯到第二個成員,依此類推。當然,每個初始化器必須具有匹配對應成員的型別(或者,能隱式地轉換為成員型別)。如下所示:
Song_t mySong = { "What It Is",
"Aubrey Haynie; Mark Knopfler",
"Mark Knopfler",
297,
{ 9, 26, 2000 }
};
在該列表中,每個成員都有一個初始化器。因為成員 published 也是結構型別,所以其初始化器是另一個初始化列表。
可以使指定的初始化器個數少於結構的成員個數。在這種情況下,最後沒有對應到初始化器的成員會被初始化為 0。
Song_t yourSong = { "El Macho" };
在上述定義之後,除第一個成員以外,yoursong 的所有其他成員都是 0。成員中的 char 陣列被賦值為空字串,而成員 published 則包含無效的日期{0,0,0}。
如果結構物件屬於自動儲存類別,初始化器可以是非常數表示式。也可以用相同結構型別的已有物件來初始化一個新的自動結構:
Song_t yourSong = mySong; // 兩個結構在一個語句塊內,為有效的初始化