这段C语言指针代码为什么编译提示“非法的间接寻址”?

为什么这个代码提示非法间接寻址? #include "stdio.h" #include "conio.h" #include "stdlib.h" main(){ static int a[3][2]={{1,2},{3,4},{5,6}}; int(*p)[2]=a; int *b[3]; b[0]=(int *)(p); printf("%d",*(*(b[0]+1)+1)); getch(); }

第1个回答  2019-07-09
你好!!!
int
*b[3];这是定义一个指针数组b,数组的每个元素都是指针,即b[0]也是指针
那么既然b[0]是指针变量,此时我们只需把b[0]看成一个指针变量p可以吧,那么p[n]和*(p+n)是等价,b[0]=(int
*)(p);就是把数组的a的首地址强制转换给给一个普通的指针变量b[0],即b[0]指向第一行的一个元素,*(b[0]+1)表示第二个元素,即为2,printf("%d",*(*(b[0]+1)+1));修改为printf("%d",*(b[0]+1));才是正确的。
总结,",*(*(b[0]+1)+1)去表示一个简单的指针变量是错误的,所以在编译时期就报错。
相似回答