数组和指针相关

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)”。删除指向动态分配内存的指针失败,因而无法将该内存返还给自由存储区。

原文地址:https://www.cnblogs.com/super86/p/3657224.html