C專家程式設計 Chapter3 C語言宣告

2022-10-11 08:54:12 字數 1426 閱讀 9573

char (*j)[20]; //j是乙個指向陣列的指標,陣列內有20個char元素

j = (char (*)[20])malloc(20); 如果把星號兩邊看上去多餘的括號拿掉,**變成非法的。

const int * grape;

int const * grape;

int * const grape;  最後一種情況下指標是唯讀的,而兩外兩種情況下,指標所指向的物件是唯讀的。物件與指標都是唯讀的情況:

const int * const grape;

int const * const grape;

c語言的宣告器(declarator)

c語言中的宣告

函式的返回值不能是乙個函式可以是乙個函式指標,函式的返回值不能是乙個陣列,可以使是乙個指向陣列的指標,陣列裡不能由函式,但允許有函式指標。

結構:在結構的定義後面跟一些變數名,表示這些變數的型別是這個結構。如:

struct plum, pomegranate, pear;

可以在struct關鍵字後面加乙個可選的「結構標籤」:

struct fruit_tag plum, pomegranate, pear;   以後可以用struct fruit_tag作為struct 的簡寫形式。推薦用法:宣告結構時始終用結構標籤最好加上_tag,把變數的宣告和結構的宣告分開。

struct fruit_tag pear, plum;

結構中允許存在位段、無名字段以及對齊所需的填充字段。這些通過在字段的宣告後面加乙個冒號以及字段位長的整數來實現的。

struct pid_tag; 現在可以把陣列當做第一等級的型別,用賦值語句拷貝整個陣列,以傳值呼叫的方式將它傳遞到函式,或者把它作為函式的返回型別。

聯合(union):在結構中,每個成員依次儲存,而在聯合中,所有成員都從偏移位址零開始儲存,從而每個成員的位置都重疊在一起:在某一時刻,只有乙個成員真正儲存於該位址。其他就和結構一樣了。聯合一般是作為大型結構的一部分存在的。他可以用來節省空間,因為有些資料項是不可能同時出現的,把一些互相排斥的字段儲存於乙個聯合中。如    

union sec_charbyte;  //4個8位的位元組

}value;

這個聯合允許程式設計師提取整個32位值,也可以提取單獨的位元組段如value.byte.c0等。

列舉(enum):定義和結構、聯合一樣,只是把一串名字和一串整型值聯絡在一起。預設是從0開始,如果對其中乙個標示符進行了賦值,那麼緊接其後的那個標示符的值就比所賦的值大1,依次類推。#define定義的名字一般在編譯時被丟棄,而列舉則通常在偵錯程式中可見,可以在除錯**時用它們。

《C專家程式設計》筆記3

const int grape int const grape int const grape 最後一種情況指標是唯讀的,上面兩種指標所指的物件是唯讀的 結構體可以用於段位,之前沒聽說過吧 includeint main struct bit field temp temp.a 1 printf d...

《C專家程式設計》筆記3

第三章 分析c語言的宣告 const int grape int const grape int const grape 最後一種情況指標是唯讀的,上面兩種指標所指的物件是唯讀的 結構體可以用於段位,之前沒聽說過吧 cpp include int main struct bit field temp...

C專家程式設計

說到c語言,首稱 c程式語言 這是一本入門和進修均可的書籍,值得讀三遍以上,方才有味。進修書籍如 c專家程式設計 是一本c語言較高層次的書,是成為c語言專家的必經之路。我自以為達到了一定的 程度,才開始學習這本書的。人言,c語言是一門藝術,需要多年歷練才能達到較為完善的境界,此言不虛。c語言進修書籍...