《C專家程式設計》學習筆記(分析C語言的宣告)

2021-06-22 12:15:58 字數 1563 閱讀 8374

一、c語言宣告的語法有時會帶來嚴重的問題

1、「物件宣告的形式和使用的形式盡可能相似」

1)、優點——各種操作符的優先順序在「宣告」和「使用」時是一樣的。

2)、缺點——操作符的優先順序設計不當、過於複雜。

2、無法以一種人們所習慣的自然方式從左到右閱讀乙個宣告,在ansi c加入volatile和const關鍵字後情況更糟。

1)、例項

a、const  int  *  grape 

b、 int  const   *  grape 

c、int  *  const    grape_jeelly

d、const  int  *  const  grape_jam

e、 int  const   *  const  grape_jam

說明:a、b是一樣的,都表示指標所指向的物件是唯讀的,c表示指標式是唯讀的,d、e也是一樣的,都表示物件和指標都是唯讀的。

二、c語言宣告是如何形成的

1、c語言中的宣告器(p58表3-1)

2、c語言中的宣告(p59表3-2) 注意:並非所有的形式組合都是合法的

3、結構(struct)

1)、宣告——結構的內容可以是任何其他的資料宣告,單個資料項、陣列、其他結構、指標等。

b、引數在傳遞時首先盡可能地存放到暫存器中(追求速度)。

2)、結構中的陣列

4、聯合(union)

1)、宣告

2)、優點

a、可用來節省記憶體空間

b、把同乙個資料解釋成不同的資料定義。

5、列舉(enum)

1)、宣告

2)、優點

a、#define定義的名字一般在編譯時被丟棄,但列舉名字移植在偵錯程式可見,可以在除錯**中使用它們。

三、c語言優先順序規則(重點)

1)、理解c語言宣告的優先順序規則(p64)

2)、c優先順序直觀分析法(p65表3-1)

四、通過圖表分析c語言中的宣告(重點)

通過p65表3-1進行分析。

五、typedef相關

1、作用:為一種型別引入新的名字,而不是分配空間。

注意:不要為了方便起見對結構使用typedef。

2、typedef的缺點

1)、語法混亂,可以把幾個宣告塞到乙個宣告中去。

2)、在任何typedef宣告中,甚至不必把typedef放在宣告的開始位置。

3、與#define的區別

1)、#deifne可以用其他型別說明符對巨集型別名進行擴充套件,但對typedef所定義的型別名不能這樣做。

2)、在連續幾個變數的宣告中,用typedef定義的型別能夠保證宣告中的所有變數均為同一種型別,而用#define定義的型別無法保證。

4、typedef應用範圍

1)、陣列、指標、結構以及函式的組合型別。

2)、可移植型別。

3)、為後面的強制型別轉換提供乙個簡單的名字。

例:typedef  int  (*ptr_to_int_fun)(void);

char * p;......

=(ptr_to_int_fun)  p

六、理解分析c語言宣告的**

《C專家程式設計》 分析C語言的宣告

一些比較容易搞混的宣告 char p 20 char p 20 第一種宣告由於的優先順序要高於 所以p先與結合表示p是乙個有20個元素的陣列,這個陣列的元素是指向char型別的指標 第二種宣告由於 的優先順序要高於,所以p先與 結合表示p是乙個指標,指向乙個有著20個char型別的元素的陣列 con...

C專家程式設計學習筆記 2

第4章 令人震驚的事實 陣列和指標並不相同 1.區別定義和宣告 宣告相當於普通的宣告 它所說明的並非自身,而是描述其他地方的建立的物件.定義相當於特殊的宣告 它為物件分配記憶體 2.當書寫了extern char p,然後用p 3 來引用其中的元素時,編譯器將會 1 取得符號表中p的位址,提取儲存與...

C專家程式設計學習筆記一

typedef和巨集文本替換的重要區別 首先,可以用其它型別說明符對巨集型別名進行擴充套件,但對typedef所定義的型別名卻不能這樣做。其次,在連續幾個變數的宣告中,用typedef定義的型別能夠保證宣告中所有的變數均為同一種型別,而用 define定義的型別則無法保證。編譯器位於編譯過程的哪乙個...