你必須知道的495個C語言問題,學習體會一

2022-07-21 01:12:17 字數 1745 閱讀 2526

c語言作為一門古老的語言,其靈活性和容易出錯都讓人 又愛又恨,書籍《你必須知道的495個c語言問題》,使用問答的形式,告訴讀者 c語言使用的各個方面的知識,包括一些冷知識等。以下,我要摘錄和整理些 ,我認為比較重要的知識進行分享。

1.關於int與long,眾所周知,c語言標準沒有規定標準型別的大小,特別是對於int型別,在甚多16位的機器上看,int型別其實是16位的,而到了32位機器上,int就是32位的了,實際上,int型別代表了機器的自然字長,這是多整形變數的當然之選,在標準標頭檔案中已經定義了標準型別名稱int16_t和int32_t,分別表示這兩種字長。而long則一直是 32位的,long long 則是64位。但是,到了64位機器時代,long型已經變成了64位了,而int本身還是保持著32位的字長。

2.區別宣告 和 定義 ,declaration or definetion

書中 給的 解釋 如下:首先,儘管乙個全域性變數或函式可以(在多個編譯單元中)多次「宣告」,但是「定義」卻最多只能出現一次,對於全域性變數,定義是真正分配空間並賦初值(如果有)的宣告,對於函式,定義是提供函式體的「宣告」。

當希望在多個原始檔中共享變數或者函式時 ,需要確保定義和宣告的一致性,最好的安排是在某個相關的.c檔案中定義,然後在.h中進行外部宣告。在需要使用的時候,只要包含對應的標頭檔案即可。

將全域性變數定義在.h中是乙個好主意

3.儲存型別

const

神奇二、記住不是常量的意思,可以理解為唯讀,可以參看volatile與const綜合分析

4.複雜宣告

這是c讓人痛不欲生的源泉。

比如 宣告 char *(*(*a[n])())();

這到底是什麼鬼?

下面 請遵守 "從內到外"的 理解方式來 理解下:

記住: 和() 比* 優先順序高

那麼再看我們常用的 函式指標 型別,就很簡單了;比如:

char *( *pf )(double* dd,int n);

可見,乙個宣告的 最終型別 由第一層的 型別指定的。現在 你要是還分不清楚 函式指標 和指標函式就說不過去了。

那麼,我們會解析乙個複雜宣告了,我們怎麼自己宣告呢?

這裡 ,我推薦使用 typedef

還是最上面的例子,我們怎麼樣使用typedef 來做宣告呢?

typedefchar* pc;//

宣告乙個指向char* 的指標

typedef pc fpc();//

宣告乙個返回值為char* 的函式

typedef fpc *pfpc;//

宣告乙個返回值為該函式 的 指標

typedef pfpc fpfpc();//

宣告乙個 返回值為 以上指標的函式

typedef fpfpc *pfpfpc;//

宣告乙個 以上型別的函式指標

pfpfpc a[n];//

宣告乙個陣列,該陣列的型別為以上函式指標

在實際編碼中 ,自然不可能有如此多層的宣告,一般的,我們都是宣告的兩層,還是函式指標的例子,我們可以這樣宣告:

typedefchar*(*pf)(double*dd,int

n);pf repf;

5.初始化

實際的編碼中,忘記初始化,或者初始化錯誤造成的問題還是很嚴重的。

建議,所有的區域的變數都進行人工顯式的初始化,別偷懶哈。

《你必須知道的495個C語言問題》一導讀

你必須知道的495個c語言問題 你可能在酒吧或聚會上有這樣的經歷,有人跟你打賭讓你做一些看似簡單,但最後卻限於人體特質或物理規律而根本無法完成的事情。跟你打賭的人知道,他挑戰的人越多,他持續獲勝的可能性就越大,因為這些特質或規律雖然十分隱晦,卻是相當穩定 可以 的。同樣,如果你讓很多人來完成乙個複雜...

《你必須知道的495個C語言問題》知識筆記及補充

它可以用作一種格式上的提示表明函式的定義可能在另乙個原始檔中,但在 extern int f 和 int f 之間並沒有實質的區別。補充 extern可以置於變數或者函式前,以標示變數或者函式的定義在別的檔案中,提示編譯器遇到此變數和函式時在其他模組中尋找其定義。此外extern也可用來進行鏈結指定...

你必須知道的495個C語言問題,學習體會二

這是本主題的第二篇文章,主要就結構體,列舉 聯合體做一些解釋 現代c語言程式設計 結構化的基石,diy時代的最好代言人,是物件導向程式設計中類的老祖宗。我們很容易定義乙個結構體,比如學生 struct student 在使用該結構體的地方都可以使用stu st 代替 struct student s...