首先介绍指向数组的指针:
char *p = new char;
定义指向动态分配的字符变量的指针;
char *p = new char[3];
定义指向动态分配的一维字符数组的指针,p指向数组首个元素的地址,即(p+1)为数组第二个元素的地址;
char (*p)[3] = new char[2][3];
定义指向动态分配的二维字符数组(三行)的指针,p指向数组首行的地址,即(p+1)为数组第二行的地址;
char (*p)[9][8] = new char[7][9][8];
定义指向动态分配的三维字符数组的指针(7个9列8行的二维数组),p指向首个二维数组的地址,即(p+1)为第二个二维数组的地址;
同样的,char数据类型可换成其他数据类型,比如Point类类型,例:
Point *p = new Point[2];
定义指向动态分配的一维Point类对象数组的指针。
再介绍指针数组:
这里只举例一维指针数组:Point *p[2];
定义一个Point类对象的数组,数组里的两个元素都是指向Point类对象的指针(p[0], p[1])。
最后,指向动态指针数组的指针:
int *p = new int *[10];
//错误
int **p = new int *[10];
//正确
new int *[10]表示动态生成一个包含10个int型指针的数组,要定义指向指针数组的指针p,那么p也就是指向指针数组首元素,而指针数组首元素是一个int型指针,所以p就是指向int型指针的指针,即指向指针的指针。要定义指向指针的指针,就要使用T **p的格式。