如何理解指向指针的指针变量**p,和指向字符串类型的指针变量char *p,,以及*p[]和(*p)[]

file 1:C语言中如下定义:

char *name[]={"abc","edf","ghi"};

char **p;

int i;

为什么可以赋值p=name+i(是不是等同于p=name[i]?);而不是p=*name+i;或者*p=name+i?

file 2:

int a[4]={1,3,5,7};

int (*p)[4];

为什么可以赋值p=&a;而不可以赋值p=a(程序提示警告,但可以编译运行)?


级数
浏览 2504回答 1
1回答

wait_3

首先创建数组,数组就是就是一个指针指向一组内存空间,比如a[3],a就是一个指针。那么上述例子1的p和name就是同一个等级的指针,都是指向指针的指针,p = name + i,并不等同于p = name[i];p = name + i只是将name这个指针存储的地址加上i后赋值给p,p = name[i]是错误的语法。例子2中 a是一个指针,p则是指向一个指针数组的指针,是没法赋值的(我用visual studio 2010编译时过不了的)
打开App,查看更多内容
随时随地看视频慕课网APP