数组
- 数组作为函数参数传递时,括号内不需要带具体个数
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
指针与函数返回值
- 指针类型可以作为函数返回值,返回某个数据对象的地址
- 不能返回局部变量的地址,只能放回全局变量地址
指针运算
- 指针与整数加减:以指向的目标数据对象类型为单位,而不是以字节为单位
回调函数
- 回调函数通过函数指针类型实现,使用函数指针作为参数传递。
- 函数指针所指向的函数定义可以在未来再实现
面向对象
- 基类析构函数为什么要定义为虚函数?
当基类指针指向派生类的时候,若基类析构函数不声明为虚函数,在析构时,只会调用基类而不会调用派生类的析构函数,从而导致内存泄露。
- 构成多态的条件
- 必须通过基类的指针或者引用去调用函数。
- 基类中必须包含虚函数,且在派生类中必须完成了虚函数的重写。