數組
- 數組作爲函數參數傳遞時,括號內不需要帶具體個數
void function( int a[], unsigned int n){...}
void function( int *p, unsigned int n){...}
int a[10];
function(a, 10);
- sizeof的值
int a[10];
sizeof(a) = 40; sizeof(a[0]) = 4
- 數組名是常數,不能賦值,如a++,但指針可以
- 不能對數組進行整體賦值,但初始化可以
char s[9] = "CPP-Prog"; // 正確
char s[9]; s = "CPP=Prog" // 錯誤
- 多維數組作爲函數參數,不能每維都不傳遞元素個數
void function(int a[][], unsigned int n, unsigned int m) //錯誤寫法
void function(int a[][3], unsigned int m) //正確寫法
指針常量和常量指針
- 常量指針:指向常量的指針,不能通過指針修改指向對象的值,但可以改變指針值
int n = 10; const int * p = &n
- 指針常量:指針指向的位置不可變化,但可以修改指針指向對象的值,必須在定義時初始化
int n = 10; int * const p = &n
- 常量指針常量:指針值不可改變,指向對象的值也不可改變
int n = 10; const int * const p = &n
指針與函數返回值
- 指針類型可以作爲函數返回值,返回某個數據對象的地址
- 不能返回局部變量的地址,只能放回全局變量地址
指針運算
- 指針與整數加減:以指向的目標數據對象類型爲單位,而不是以字節爲單位
回調函數
- 回調函數通過函數指針類型實現,使用函數指針作爲參數傳遞。
- 函數指針所指向的函數定義可以在未來再實現
面向對象
- 基類析構函數爲什麼要定義爲虛函數?
當基類指針指向派生類的時候,若基類析構函數不聲明爲虛函數,在析構時,只會調用基類而不會調用派生類的析構函數,從而導致內存泄露。
- 構成多態的條件
- 必須通過基類的指針或者引用去調用函數。
- 基類中必須包含虛函數,且在派生類中必須完成了虛函數的重寫。