C語言 指定初始化器

2021-10-04 14:44:00 字數 1931 閱讀 9104

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個元素。

c99c11為結構提供了指定初始化器(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...