
由上可知,以下的赋值是正确的:
char (*p)[3][2][2] = &a;//对数组名取地址类型为整个数组
char (*p)[2][2] = a;
char (*p) [2] = a[0];//或者a[1]、a[2]
char *p = a[0][0];//或者a[0][1]、a[1][0]...
四:多级指针
所谓的多级指针,就是一个指向指针的指针,比如:
char *p = "my name is chenyang.";
char **pp = &p;//二级指针
char ***ppp = &pp;//三级指针
假设以上语句都位于函数体内,则可以使用下面的简化图来表达多级指针之间的指向关系。

多级指针通常用来作为函数的形参,比如常见的main函数声明如下:
int main(int argc,char ** argv)
因为当数组用作函数的形参的时候,会退化为指针来处理,所以上面的形式和下面是一样的。
int mian(int argc,char* argv[])
argv用于接收用户输入的命令参数,这些参数会以字符串数组的形式传入,类似于:
char * parm[] = {"parm1","parm2","parm3","parm4"};//模拟用户传入的参数
main(sizeof(parm)/sizeof(char *),parm);//模拟调用main函数,实际中main函数是由入口函数调用的(glibc中的入口函数默认为_start)
多级指针的另一种常见用法是,假设用户想调用一个函数分配一段内存,那么分配的内存地址可以有两种方式拿到:第一种是通过函数的返回值,该种方式的函数声明如下:
void * get_memery(int size)
{
void *p = malloc(size);
return p;
}
第二种获取地址的方法是使用二级指针,代码如下:
int get_memery(int** buf,int size)
{
*buf = (int *)malloc(size);
if(*buf == NULL)
return -1;
else
return 0;
}
int *p = NULL;
get_memery(&p,10);
总结
关于多级指针的用法很多,尤其以二级指针应用最为广泛,后续的有时间再进行补充。c/c++中的多级指针与多维数组的内容到这就基本结束了,希望本文的内容对大家能有所帮助。










