1 陣列
陣列的維度必須為大於0的常量表示式
int a[3] = ; 函式體內的陣列,無初始化操作. 函式體外的會初始化預設值.
char b = "abc"; 會在後面新增乙個空字元. 長度為4.
不允許直接複製和賦值. 長度是固定的.
2 陣列操作
下標型別為size_t 保護好避免越界 buffer overflow
3 指標
指標用於指向物件 儲存的是另乙個物件的位址
double *p; 理解指標時,從右向左閱讀.
避免使用未初始化的指標
void* 指標 只是為了儲存位址.
給指標賦值: p = &a;
通過指標賦值: *p = "test";
4 指標引用區別
引用必須定義時初始化 而且一直指向該物件.
指向指標的指標 int **p1 = &p2;
指標訪問陣列, int a = ; int *p = a; 指向陣列的第乙個元素.
在指標上加上(或減去)乙個整型數值 n 等效於獲得乙個新指標,指向指標原來指向的元素之後(或之前)的第 n 個元素。
兩個指標減法操作的結果是標準庫型別(library type)ptrdiff_t的資料
int last = *(ia + 4); 獲得ia指標陣列的[4]元素. 不可寫為 *ia + 4 會取出ia的數值再加4.
指向 const 的指標常用作函式的形參
5 c 風格字串
帶結尾的字串陣列 const char 型別的陣列
cstring 是 string.h 標頭檔案的 c++ 版本,而 string.h 則是 c 語言提供的標準庫。
#include
strlen(s) 返回 s 的長度,不包括字串結束符 null
strcmp(s1, s2) 比較兩個字串 s1 和 s2 是否相同。若 s1 與 s2 相等,返回 0;若 s1 大於 s2,返回正數;若 s1 小於 s2,則返回負數
strcat(s1, s2) 將字串 s2 連線到 s1 後,並返回 s1
strcpy(s1, s2) 將 s2 複製給 s1,並返回 s1
strncat(s1, s2,n) 將 s2 的前 n 個字元連線到 s1 後面,並返回 s1
strncpy(s1, s2, n) 將 s2 的前 n 個字元複製給 s1,並返回 s1
永遠不要忘記字串結束符null
const char *str = st2.c_str(); // st2的內容可能會改變,所以請注意這樣的bug
6 自由儲存區或堆
每乙個程式在執行時都占用一塊可用的記憶體空間,用於存放動態分配的物件,此記憶體空間稱為程式的自由儲存區或堆。c 語言程式使用一對標準庫函式
malloc 和 free 在自由儲存區中分配儲存空間,而 c++ 語言則使用 new和 delete表示式實現相同的功能。
int *pia = new int[10]; 此 new 表示式分配了乙個含有 10 個 int 型元素的陣列,並返回指向該陣列第乙個元素的指標,此返回值初始化了指標 pia。
c-style strings(c 風格字串) compiler extension(編譯器擴充套件)compound type(復合型別) delete expression(delete 表示式 dynamically allocated(動態分配的)
free store(自由儲存區)== heap(堆)precedence(優先順序)
c primer 第4章 陣列和指標
避免使用未初始化的指標 對指標進行初始化或賦值只能使用以下四種型別的值 把int型變數賦給指標是非法的,儘管int型變數的值可能為0.但允許把數值0或在編譯時可獲得0值的const量賦給指標。3.void 指標 c 提供了一種特殊的指標型別void 它可以儲存任何型別物件的位址 void 指標只支援...
C Primer 第4版 第4章 陣列和指標
p95 設計良好的程式只有在強調速度時才在類實現的內部使用陣列和指標。p96陣列的維數必須用值大於等於1的常量表示式定義。此常量表示式只能包含整型字面值常量 列舉型別或者用常量表示式初始化的整型const物件。非const物件以及要到執行階段才知道其值的const變數都不能用於定義陣列的維數。p97...
C Primer(四)陣列和指標
陣列定義中的型別名可以是內建型別或者類型別,除引用之外,陣列元素的型別還可以是任意的復合型別。沒有所有元素都是引用的陣列 陣列的維數必須用值大於1的常量表示式定義。此常量表示式只能包含整型字面值 列舉常量或者用常量表示式初始化的整型const物件。非const變數以及要到執行時才知道其值的const...