数组和指针相关
1、没有显式初始化数组,则:
- 在函数体外定义的内置数组,其元素均会初始化为0;
- 在函数体内定义的内置数组,其元素均无初始化;
- 无论数组在哪里定义,如果元素为类类型,则自动调用该类的默认构造函数进行初始化;如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。
2、数组安全性最大的问题是缓冲区溢出(buffer overflow)错误。
3、指针与迭代器相同点是:提供对其所指对象的间接访问。与迭代器不同的是指针用于指向单个对象,而迭代器只能用于访问容器内的元素。关键概念:给指针赋值或者通过指针进行赋值。
引用和指针的区别:引用必须在初始化时赋值,引用一经初始化,就始终指向同一个特定的对象。
指针和const限定符之间的两种交互类型:指向const对象的指针和const指针。C++语言强制要求指向const对象的指针也必须具有const特性。例:
指向const对象的指针 const double *cptr;
const 指针 const double *cptr; int errNumb=0; int *const curErr=&errNumb;
指向const对象的const指针 const double pi=3.14159; const double *pi_ptr=π
动态分配数组:
int n=get_size(); int * p=new int[n];
4、指针尽量在声明时初始化,以避免使用未初始化的指针。
5、void*指针类型为C++特有,可以保存任何类型对象的地址。
6、删除动态分配内存失败称为“内训泄露(memory leak)”。删除指向动态分配内存的指针失败,因而无法将该内存返还给自由存储区。