c99增加了乙個新特性:指定初始化器(designated initializer)。 利用該特性可以初始化指定的陣列元素。例如, 只初始化陣列中的最後乙個元素。 對於傳統的c初始化語法, 必須初始化最後乙個元素之前的所有元素,才能初始化它:
int arr[6]
=;// 傳統的語法
而c99規定, 可以在初始化列表中使用帶方括號的下標指明待初始化的元素:
int arr[6]
=;// 把arr[5]初始化為212
對於一般的初始化, 在初始化乙個元素後, 未初始化的元素都會被設定為0。
#include
#define months 12
intmain
(void);
int i;
for(i =
0; i < months; i++
)printf
("%2d %d\n"
, i +
1, days[i]);
return0;
}執行結果為:131
22930
40531
630731
8090
100110
120
以上輸出揭示了指定初始化器的兩個重要特性。
1、如果指定初始化器後面有更多的值, 如該例中的初始化列表中的片段: [4] = 31,30,31, 那麼後面這些值將被用於初始化指定元素後面的元素。也就是說, 在days[4]被初始化為31後, days[5]和days[6]將分別被初始化為30和31。
2、如果再次初始化指定的元素, 那麼最後的初始化將會取代之前的初始化。初始化列表開始時把days[1]初始化為28, 但是days[1]又被後面的指定初始化[1] = 29初始化為29。
int stuff=
;//會發生什麼?
int staff=
;//會發生什麼?
3、編譯器會把陣列的大小設定為足夠裝得下初始化的值。 所以stuff陣列有7個元素,而staff有9個元素。
c99和c11為結構提供了指定初始化器(designated initializer),其語法與陣列的指定初始化器類似。但是, 結構的指定初始化器使用點運算子和成員名(而不是方括號和下標) 標識特定的元素。
例如, 只初始化book結構的value成員, 可以這樣做:
struct book
;struct book surprise =
;
可以按照任意順序使用指定初始化器:
struct book gift =
;
與陣列類似,
1、 在指定初始化器後面的普通初始化器, 為指定成員後面的成員提供初始值。
2、對特定成員的最後一次賦值才是它實際獲得的值。
例如:
struct book gift=
;
賦給value的值是0.25, 因為它在結構宣告中緊跟在author成員之後。 新值0.25取代了之前的18.9。
linux驅動中,平台匯流排裝置資源的初始化。
struct resource led_res=
,[1]
=,};
[1]: stephen prata[著], 姜佑[譯]. c primer plus(第六版)[m]. 人民郵電出版社. 指定初始化器
陣列可以在定義的時候進行初始化,例如 int array 3 當初始化列表中的值少於陣列元素個數時,編譯器會自動把剩餘的元素都初始化為零,也就是說,如果不對陣列進行初始化,陣列元素和未初始化的普通變數一樣,儲存的是隨機值,但是,如果初始化陣列1中的部分數值,其他未初始化的值為零,例如 int arr...
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
陣列指定初始化器
c99增加了乙個新特性 指定初始化器。利用該特性可以初始化指定的陣列元素。例如,只初始化陣列中的最後乙個元素。對於傳統的的c初始化語法,必須初始化最有乙個元素之前的所有與還俗,才能初始化它 int arr 6 這樣寫和上面的結果是一樣的,由於前幾個元素沒有初始化,所以編譯器會自動把它們設定為0。in...