C陷阱與缺陷讀書筆記(第3章)語義「陷阱」

2021-07-02 06:22:55 字數 1040 閱讀 3292

1.c語言只有一維陣列,而且陣列的大小必須在編譯器就作為乙個常數確定下來。

2.任何乙個陣列下標進行運算的,實際上都是通過指標進行。

3.int calendar[12][31]  calendar是乙個陣列,該陣列包含12個陣列型別的元素,其中每個元素都是乙個擁有31個整型元素的陣列。

4.除了陣列名a 被用作運算子 sizeof 的引數這一情形,在其他所有的情形中陣列名都代表指向陣列的下標為0的元素指標。

5.int (*ap) [31]宣告了*ap是乙個擁有31個整型元素的陣列,則ap就是乙個指向這樣陣列的指標。

6.庫函式 malloc   ,該函式接受乙個整數,然後分配容納同樣數目的字元的一塊記憶體。

7.c語言中會自動地將作為引數的陣列宣告轉換為相應的指標宣告。

8.複製指標並不同時複製指標所指向的資料。

9.當常數0賦值給乙個指標變數時,絕對不能被解引用。

10.重複執行表示式 --n>=0只是進行n次迭代的一種方法。

11.陣列中實際不存在的」溢界「元素的位址位於陣列所佔記憶體之後,這個位址可以進行賦值和比較。當然如果要引用該元素,則就是非法的了。

12,當兩個運算元都是有符號數時,溢位就有可能發生,一種正確的方式是將a和b都強制轉換成無符號數。

if((unsigned)+(unsigned)b>int_max)  

也可以寫成

if (a>int_max-b)

13.為main函式提供返回值

0代表成功,返回非0代表程式執行失敗。

14.逗號運算子,首先對左側運算元求值,然後該值被丟棄,再對右側運算元求值。

注意,分隔函式引數的逗號非逗號運算子。

15.避免欄杆錯誤的兩個通用原則  首先考慮簡單情況下的特例,然後將得到的結果外推,仔細計算邊界,絕不掉以輕心。

16.下界是入界點,包含在取值範圍中,而上界是出界點,不包含在取值範圍中。

如果取值範圍為空,則上界等於下界。

17.緩衝區中已經存放的字元

bufptr-buffer    

未占用的字元   n-(bufptr-buffer)

C陷阱與缺陷讀書筆記(第2章)語法「陷阱」

1.任何c變數的宣告都由兩部分組成,型別以及一組類似表示式的宣告符。2.因為宣告符與表示式類似,所以我們也可以在宣告符中任意使用括號。3.該型別的型別轉換符得到方式 只要把宣告中的變數名和宣告末尾的分號去掉,再將剩餘的部分用乙個括號整個封裝起來即可。4。fp 就呼叫fp所指向的函式的形式。函式運算子...

《C缺陷與陷阱》讀書筆記

一 為什麼很多程式設計規範上要求單字元符號兩邊用空格隔開呢?如 a 2 最好不要寫成 a 2 在 c陷阱與缺陷 中詞法陷阱部分講到 如y x p,原本想表達的意思是p指標指向除數,但實際編譯過程中,編譯器會將 理解為一段注釋的開始,編譯器將不斷地讀入字元,直到 出現為止 這一錯誤也在 c專家程式設計...

《C陷阱與缺陷》讀書筆記

如果乙個整型常數的第乙個字元是數字0,那麼該常量將被視作八進位制數。如0195相當於十進位制數141 c語言中,else始終與同一對括號內最近的未匹配的if結合。switch語句中的case語句若在結尾處無break,程式將會繼續執行下一條case語句 非陣列的指標 include char r,s...