第二章 變數和基本型別
1. 顯式訪問全域性變數,用操作符::
2. 引用和指標是復合型別。
3. 引用必須初始化;一旦引用被初始化為乙個物件,就不能被指向到另乙個物件。指標可以在任何時候指向到另乙個物件;引用必須在建立時被初始化。指標可以在任何時間被初始化。引用不是物件,所以不能定義引用的引用。
4. void*,任意型別的指標。只儲存指向變數的位址,並不知道位址長度,因為不知道變數型別。因此也不能解引用。
5. 理解復合型別的宣告。變數的定義包括乙個基本資料型別和一組宣告符,int *p = &i, &r=i; *和&都是型別修飾符,是宣告符的一部分。我們也可以把空格寫在型別修飾符與變數名之間,如int* p,p1。但是此時基本資料型別還是int, 所以p1的型別是int。
6. 指向指標的引用。int i=42; int *p; int *&r = p; 從右到左讀有利於分析它的真實含義。
7. const物件一旦建立後其值就不可改變,因此必須初始化。預設地,const物件只在當前檔案中有效。希望共享在多個檔案中地話,需要加extern。
8.常量引用僅僅對引用可參與地操作做了限制,對其物件本身是不是乙個常量未作限定。int i=0; const int &r2 = i; int &r1=i;
r1=0;(正確) r2=0(錯誤);
9. 要想存放常量物件位址,必須使用指向常量的指標。 const int i = 1; const int *cptr = &i;
10. 總結:指向常量的引用或者指標,不過是它們自以為是罷了,它們覺得自己指向了常量,自覺不去改變所指向物件的值。但是物件本身不一定是常量。
12. 常量表示式。const int a = get_size();a不是常量表示式,因為get_size()在執行是才能得到。constexpr int a = get_size(); 此時a是常量表示式。constexpr是c++11新特性。
13. constexpr 定義指標時,constexpr僅對指標有效,與所指物件無關(注意以const的區別)。
14. typedef,新標準提出using。typedef char *pstring, 實際上pstring是char*的別名。
15. int i = 0, *p=&i; decltype(*p) c; 錯誤,c的型別是int&,必須初始化。
c primer之變數與基本型別
如果表示式裡既有帶符號型別又有無符號型別,當帶符號型別取值為負時會出現異常結果。因為帶符號數會自動轉換成無符號數。unsigned u 10 int i 42 std cout endl 輸出 84 std cout endl 如果int佔32位,輸出4294967264引用與指標 引用並非物件,引...
C Primer 筆記之 變數和函式
32位機器上 cout 輸出 4 4 8 8 4也就是說只有long long 以及double是占用8個位元組的。1 引用和指標一樣,是繫結對物件的另外乙個名字,改變它或者它繫結的物件,都會使雙方改變 2 必須是乙個物件的別名,int b 1 是錯的 3 若繫結的物件時const型別,那麼引用也必...
c primer閱讀筆記之陣列與指標
陣列初始化方式 沒有顯示初始化 陣列的主要限制 int pia new int 10 會分配空間但不進行值初始化 int pia new int 10 會分配空間而且會進行值初始化 如果在堆中建立的陣列儲存了內建型別的const物件,則必須為這個陣列提供初始化 何時使用動態陣列?當我們在編譯的時候,...