为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
GCT1015 2018-10-24 13:09:05
为什么这个代码提示非法间接寻址?#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 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

你好!!!
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)去表示一个简单的指针变量是错误的,所以在编译时期就报错。

查看完整回答
反对 回复 2018-11-03
  • 1 回答
  • 0 关注
  • 1374 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信