C 讀書筆記

2021-06-26 22:00:52 字數 1331 閱讀 9789

c陷阱和缺陷

1.賦值符優先順序比邏輯比較低,賦值表示式的結果為賦值後的結果

2.編譯器掃瞄符號使用貪心法,盡量選擇最長字元的符號串,如a---理解為a -- -而不是a - --

3.為相容老版本編譯器,不同符號之間最好加空格,如a=-1可能理解為a =- 1,應該改為a = -1

4.老版本編譯器,8進製數以0開始,後面可以加超過8的數字,新版本會在編譯時提示出錯

5.單引號中放多個字元,賦值給乙個單字元變數,只會取第乙個字元,賦值給乙個多位元組變數,會將這些字元相加成乙個大的整數,如char a='dd',a為』d',而int a='dd',a為'd'*2的8次方加'd'

6.() 結合性高於*

7.理解宣告,宣告符號的整體為宣告的型別,以此推導出宣告符號的型別,如float *g(),*g()整體為float型,推導出g為返回float*的函式

8.宣告的型別轉換,即把宣告符號去掉,再整體加括號,如float *g(), g的型別為(float *())

9.新增括號可以解決運算子優先順序問題,但是不易理解,所以記住算符優先順序是有好處的

10 任何乙個邏輯運算子的優先順序低於任何乙個關係運算子

11.移位運算子的優先順序比算術運算子要低,但是比關係運算子要高

12.如果乙個程式中包括語句:extern int a; 那麼程式就必須在別的某個地方包括:int a;

13.static修改變數或函式,限制作用域為乙個原始檔內

14, char str和char* str的區別,前者本身為第乙個元素的位址,後面的內容指向第乙個元素的位址

15.外部符號(能夠被鏈結器發現的符號),應當放在標頭檔案中宣告,在原始檔中定義

16.陣列型別作為引數傳遞給函式,無論形參定義為陣列型別func(int list)還是指標型別(func(int* list),都被退化為指標型別,即sizeof大小為指標大小,而不是陣列長度

17.函式過載是c++新增特性,c語言不支援同名函式

18. typedef定義函式指標型別與函式型別,typedef void(type)(), typedef void(*type)();前者定義的變數即為宣告變數,不能賦值函式,後者可以賦值為相同簽名相同返回型別的函式指標

effective c++

1. c++四個次語言:c, oo, template, stl

2.類內部static變數,都需要在類外進行定義,除整型變數可以直接在類中賦值,其它需要在定義中賦值

3.enum hack:利用enum中的符號作為整數值,給陣列定義大小

4.單純常量 ,最好以const物件或enum代替,形似函式的巨集最好改用inline

5.const成員函式提供操作const物件的方法

C 讀書筆記

1.內建函式 inline必須在呼叫前進行完整定義,語 define相同,但是消除了不安全性 例 inline float circle float r 2,函式原型 語法形式 返回型別 函式名 參數列 1 函式原型的參數列中不包含引數的名字,而只包含型別 2 函式定義由函式說明部分和函式體構成 3...

c 讀書筆記

再看一本叫做 stl lectures 的書,裡面有一段 讓我學習了 include includeusing namespace std template const t max const t x,const t y int main 我說這段 讓我學習,不是說它寫的多好 因為這段 在g 4.8...

C 讀書筆記

什麼是封裝?在物件導向程式設計來講,就是把資料和針對該資料的操作,統一到乙個class裡。實際上還包括以標頭檔案的格式將一些型別定義,函式宣告,封裝至某個標頭檔案。還有namespace語法等。建構函式 什麼是建構函式?通俗的講,在類中,函式名和類名相同的函式稱為建構函式。它的作用是在建立乙個物件時...