C Primer 學習筆記(二)

2021-06-28 13:52:45 字數 2435 閱讀 3623

第二章

2.1乙個char的空間應確保可以存放機器基本字符集中任意字元對應的數字值,也就是說乙個char的大小和乙個機器位元組一樣

2.2可定址的最小記憶體塊稱為位元組,儲存的基本單元稱為字

2.3一般來說,float和double分別有7和16個有效位

2.4在算術表示式中不要使用char或bool,因為char在一些機器上是有符號的,在另外一些機器上是無符號的

2.5當我們賦給無符號型別乙個超出它表示範圍的值時,結果是初始值對無符號型別表示數值總數取模後的餘數

2.6當我們賦給帶符號型別乙個超出它表示範圍的值時,結果是未定義的(undefined)

2.7當乙個算術表示式中既有無符號數又有int值時,那個int值就會轉換成無符號數

2.8初始化不是賦值,初始化是建立變數時賦予乙個初始值,而賦值的含義是把物件的當前值擦除,用乙個新值來替代

2.9當用於內建型別的變數時,如果使用列表初始化且初始值存在丟失資訊的風險,編譯器將會報錯

2.10定義於任何函式體之外的變數被初始化為0,定義在函式體內部的內建型別變數將不被初始化(uninitialized)

2.11建議初始化每乙個內建型別的變數

2.12宣告使得名字為程式所知,定義則負責建立與名字關聯的實體

2.13如果想宣告乙個變數而非定義它,就在變數名前新增extern,而且不要顯式地初始化變數

2.14使用者自定義的識別符號中不能連續出現兩個下劃線,也不能以下劃線緊連大寫字母開頭,定義在函式體外的識別符號不能以下劃線開頭

2.15定義於for語句內的變數,塊作用域的範圍在for語句之內

2.16顯式地訪問全域性變數::***x

2.17引用本身不是乙個物件,不能定義引用的引用

2.18除了兩種以外,其他所有指標的型別都要和它所指向的物件嚴格匹配,第一種是允許乙個指向常量的指標,指向乙個非常量物件

2.19空指標不指向任何物件,在試圖使用乙個指標之前可以首先檢查它是否為空,得到空指標最直接的辦法就是使用字面值nullptr來初始化指標,也可以使用乙個null的預處理變數來給指標賦值

2.20賦值永遠改變的是等號左側的物件,所以可以輕鬆判斷改變的是指標還是指標所指向的物件

2.21對於兩個型別相同的合法指標,可以用相等操作符來判斷,比較結果是bool型別,它們都為空,或者都指向同乙個物件,或者都指向同乙個物件的下一位址都可以令這兩個指標相等

2.22void*是以一種特殊型別的指標型別,可以用於存放任意物件的位址,乙個void*指標存放著乙個位址,不過我們不知道該位址中到底是個什麼型別的物件

2.23變數的定義包括乙個基本資料型別,和一組宣告符,比如*和&都屬於型別修飾符

2.24從右向左閱讀變數的定義,離變數名最近的符號對變數的型別有最直接的影響,int *&r,從右往左閱讀可知道,r是乙個引用,*不過是確定引用的型別的,*說明r引用的是乙個指標,基本資料型別可以看出r引用的是乙個int指標

2.25const物件一旦建立後,其值就不能再改變

2.26如果想在多個檔案間共享const物件,必須在變數的定義前新增extern關鍵字

2.27對const的引用常常被稱為常量引用,這一說法並不嚴謹,因為引用不是乙個物件,所以我們沒法讓引用本身恆定不變

2.28引用的型別必須與其所引用的物件的型別一致,有兩個例外,乙個是在初始化常量引用時允許用任意表示式作為初始值,只要該表示式的結果能轉換成引用的型別即可

2.29和常量引用一樣,指向常量的指標也沒有規定其所指的物件必須是乙個常量,所謂指向常量的指標僅僅要求不能通過該指標來改變物件的值,而沒有規定不能通過其他途徑來改變

2.30用頂層const來表示指標本身是個常量,而底層const表示指標所指物件是乙個常量

2.31

int i = 0;

int *const p1 = &i;         //不能改變p1的值,這是乙個頂層const

const int ci = 42;            //不能改變ci的值,這是乙個頂層const

const int *p2 = &ci;       //允許改變p2的值,這是乙個底層const

const int *const p3 = p2; //靠右的const是頂層const,靠左的是底層const

2.32允許將變數宣告為constexpr型別以便由編譯器來驗證變數的值是否是乙個常量表示式,宣告為constexpr的變數一定是乙個常量,而且必須用常量表示式初始化

2.33可以使用別名宣告來定義型別的別名,using作為別名宣告的開始,其後緊跟別名和等號,其作用是把等號左側的名字規定成等號右側型別的別名

2.34auto讓編譯器通過初始值來推斷變數的型別,顯然auto定義的變數必須有初始值

2.35型別說明符decltype的作用是選擇並返回運算元的資料型別,編譯器分析表示式並得到它的型別,卻不實際計算表示式的值

2.36可以為資料成員提供乙個類內初始值(in-class initializer),建立物件時,類內初始值將用於初始化資料成員。沒有初始值的成員將被預設初始化

C Primer學習筆記 (二)

case true string file name getname break case false 這個 不行,想想 如果先執行了 false,然後false 裡面用到了 file name 怎麼辦?會提示沒有定義 並且編譯器會報錯 dev c 嘗試了 因此要在 true 後新增大括號 表明區域...

C Primer學習筆記(二)

繼續。1.size t和string size type,vector size type.bitset的size函式返回值型別是size t。string和vector的size函式返回值型別是對應的size type size t 是乙個於機器無關的unsigned型別,其大小足以儲存記憶體物件...

c primer學習筆記(二)

1.從const 成員函式返回 this 在普通的非 const 成員函式中,this 的型別是乙個指向類型別的 const 指標,可以改變 this 所指向的值,但不能改變 this 所儲存的位址。在 const 成員函式中,this 的型別是乙個指向 const 類型別的 const 指標,既不...