復合文字(C99)

2022-03-13 03:43:59 字數 1160 閱讀 4893

1. 假如需要向帶有乙個int參量的函式傳遞乙個值,您可以傳遞乙個int變數,也可以傳遞乙個int常量,比如5。在c99標準之前,陣列引數的情況是不相同的:可以傳遞陣列,但沒有所謂的陣列常量可供傳遞。c99新增了復合文字(compound literal)。文字是非符號常量,例如5是int型別的文字,81.3是double型別的文字,'y'是char型別的文字。開發c99標準的委員會認為,如果有能夠表示陣列和結構內容的復合文字,那麼在編寫程式時將更為方便。

對於陣列來說,復合文字看起來像是在陣列的初始化列表前面加上用圓括號括起來的型別名。例如,下面是普通陣列的宣告方法:

int diva[2] = ;

下面是乙個復合文字,建立了乙個包含兩個int值的無名稱陣列:

(int [2])

注意:型別名就是前面宣告中去掉diva後剩餘的部分,即int[2]。

2. 正如初始化乙個命名陣列時可以省略陣列大小一樣,初始化乙個復合文字時可以省略陣列大小,編譯器會自動計算元素的數目:

(int ) //

有3個元素的復合文字

3. 由於這些復合文字沒有名稱,因此不可能在乙個語句中建立它們,然後在另乙個語句中使用。而是必須在建立它們的同時通過某種方法來使用它們,一種方法是使用指標儲存其位置。請看下面的例子:

int *ptr;

ptr = (int [2]);

與陣列名相同,這個常量本身同時代表首元素的位址,因此可以用它給乙個指向int的指標賦值。隨後就可以使用這個指標。

4. 另外,復合文字也可以做為實際引數被傳遞給帶有型別與之匹配的形式參量的函式:

int sum(int ar. int

n);…

inttotal;

total = sum((int ), 6);

int (*ptr)[4

];ptr = (int [4]), };

6. 適用於結構的復合文字:

(struct book)

struct

rect ;

struct rect * area = &(struct rect);

ref: 《c primer plus》

C99標準之前沒有bool型別(C99提供)

我們知道在c 裡有專門的bool型別,用來表示真或假。但是在c語言裡沒有這樣的型別。表示式的值0為假,非0為真。所以條件判斷語句 if while 非常靈活,甚至乙個指標型別都可以是條件表示式。為了使程式更清晰,我們常常會給出如下的巨集定義 typedef int bool define true ...

keil arm 中配置c99方法 及 C99特性

配置方法 option c c misc controls c99 附c99特性 在ansi的標準確立後,c語言的規範在一段時間內沒有大的變動,然而c 在自己的標準化建立過程中繼續發展壯大。標準修正案一 在1994年為c語言建立了乙個新標準,但是只修正了一些c89標準中的細節和增加更多更廣的國際字符...

keil arm 中配置c99方法 及 C99特性

配置方法 option c c misc controls c99 附c99特性 在ansi的標準確立後,c語言的規範在一段時間內沒有大的變動,然而c 在自己的標準化建立過程中繼續發展壯大。標準修正案一 在1994年為c語言建立了乙個新標準,但是只修正了一些c89標準中的細節和增加更多更廣的國際字符...