这段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();
}

GCT1015
浏览 1480回答 1
1回答

慕娘9325324

你好!!!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)去表示一个简单的指针变量是错误的,所以在编译时期就报错。
打开App,查看更多内容
随时随地看视频慕课网APP