回爐再造 C 學習筆記(二)

2021-06-19 04:42:01 字數 2532 閱讀 7171

1.整型 int、short 和 long 都預設為帶符號型。要獲得無符號型則必須指定該型別為 unsigned,比如 unsigned long。unsigned int 型別可以簡寫為unsigned,也就是說,unsigned 後不加其他型別說明符意味著是 unsignedint 。 

2.無符號型中,所有的位都表示數值。如果在某種機器中,定義一種型別使用8 位表示,那麼這種型別的 unsigned 型可以取值 0 到 255。 

3.對於實際的程式來說,float 型別精度通常是不夠的——float 型只能保證 6 位有效數字,而 double 型至少可以保證 10 位有效數字,能滿足大多數計算的需要。 

4.通過在數值後面加 l 或者 l(字母「l」大寫或小寫)指定常量為 long 型別。

類似地,可通過在數值後面加 u 或 u 定義 unsigned 型別。同時加 l 和 u就能夠得到 unsigned long 型別的字面值常量。 

5.預設的浮點字面值常量為 double 型別。在數值的後面加上 f 或 f 表示單精度。同樣加上 l 或者 l 表示擴充套件精度。

6.在字元字面值前加 l 就能夠得到 wchar_t型別的寬字元字面值。 

7.為了相容 c 語言,c++ 中所有的字串字面值都由編譯器自動在末尾新增乙個空字元。

字元字面值

'a'表示單個字元 a 

"a" 

表示包含字母 a 和空字元兩個字元的字串

8.寬字串字面值是一串常量寬字元,同樣以乙個寬空字元結束。 

9.兩個相鄰的僅由空格、製表符或換行符分開的字串字面值(或寬字串字面值),可連線成乙個新字串字面值。 

10.在一行的末尾加一反斜線符號可將此行和下一行當作同一行處理。 

11.反斜線符號必須是該行的尾字元——不允許有注釋或空格符。同樣,後繼行行首的任何空格和製表符都是字串字面值的一部分。

12.物件就是記憶體中具有型別的區域。 

13.識別符號不能包含兩個連續的下劃線,也不能以下劃線開頭後面緊跟乙個大寫字母。有些識別符號(在函式外定義的識別符號)不能以下劃線開頭。 

14.複製初始化語法用等號(=),直接初始化則是把初始化式放在括號中。

15.初始化指建立變數並給它賦初始值,而賦值則是擦除物件的當前值並用新值代替。 

16.直接初始化語法更靈活且效率更高。

17.可以通過乙個計數器和乙個字元初始化 string 物件。這樣建立的物件包含重複多次的指定字元,重複次數由計數器指定。

18.內建型別變數是否自動初始化取決於變數定義的位置。在函式體外定義的變數都初始化成 0,在函式體裡定義的內建型別變數不進行自動初始化。 

19.extern 宣告不是定義,也不分配儲存空間。事實上,它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。 

20.如果宣告有初始化式,那麼它可被當作是定義,即使宣告標記為 extern。

21.只有當 extern 宣告位於函式外部時,才可以含有初始化式。

22.已初始化的 extern 宣告被當作是定義,所以該變數任何隨後的定義都是錯誤的。 

23.因為常量在定義後就不能被修改,所以定義時必須初始化。

24.除非特別說明,在全域性作用域宣告的 const 變數是定義該物件的檔案的區域性變數。此變數只存在於那個檔案中,不能被其他檔案訪問。

通過指定 const 變更為 extern,就可以在整個程式中訪問 const 物件。 

25.非 const 變數預設為 extern。要使 const 變數能夠在其他的檔案中訪問,必須地指定它為 extern。

26.引用必須用與該引用同型別的物件初始化。

27.因為引用只是它繫結的物件的另一名字,作用在引用上的所有操作事實上都是作用在該引用繫結的物件上。 

28.當引用初始化後,只要該引用存在,它就保持繫結到初始化時

指向的物件。不可能將引用繫結到另乙個物件。

29.將普通的引用繫結到 const 物件是不合法的。 

30.「const 引用」的意思是「指向 const 物件的引用」。

「非 const 引用」表示指向非 const 型別的引用。 

31.const 引用可以初始化為不同型別的物件或者初始化為右值,如字面值常量。

32.預設地,第乙個列舉成員賦值為 0,後面的每個列舉成員賦的值比前面的大1。

33.不能改變列舉成員的值。列舉成員本身就是乙個常量表示式,所以也可用於需要常量表示式的任何地方。 

34.每個 enum 都定義了一種新的型別。和其他型別一樣,可以定義和初始化points 型別的物件,也可以以不同的方式使用這些物件。列舉型別的物件的初始化或賦值,只能通過其列舉成員或同一列舉型別的其他物件來進行。 

35.使用 class 還是 struct 關鍵字來定義類,僅僅影響預設的初始訪問級別。 

36.用 class 和 struct 關鍵字定義類的唯一差別在於預設訪問級別:預設情況下,struct 的成員為 public,而 class 的成員為 private。 

37.#define 指示接受乙個名字並定義該名字為預處理器變數。#ifndef 指示檢測指定的預處理器變數是否未定義。如果預處理器變數未定義,那麼跟在其後的所有指示都被處理,直到出現 #endif。 

C 學習筆記(二)

在學習最新的c 標準過程中會碰到很多新問題,這些問題有時候很難理解為什麼會發生。更奇怪的是,似乎跟開發工具有關。如下面這個在vs2005下的例子 word istatus ifstream ifs if i it szprlfile,0 0 std locale global std locale ...

C 學習筆記二

chapter22 滾動字幕程式 1.ondraw函式中寫畫得內容.使用invalidate 或者 invalidaterect 重新整理 觸發ondraw 得呼叫.2.windows不允許直接 訪問顯示硬體 我們必須通過和視窗 關聯得 裝置環境 跟顯示硬體 通訊 裝置環境由c 得cdc類 物件表示...

C 學習筆記(二)

本期話題 字串文字常量,指標,引用 1 關於字串文字常量 sizeof bohr 5 字串文字常量的型別是 適當個數的const字元的陣列 所以 bohr 的型別就是const char 5 下面的賦值是可以的 char p bohr 因為在c c 原來的定義裡,字串文字常量的型別就是char 字串...