为什么C语言中*(a+i)+j能表示a[i][j]的地址

a不是地址吗,那*(a+i)应该是取a[i][0]值,为什么这里是地址... a不是地址吗,那*(a+i)应该是取a[i][0]值,为什么这里是地址 展开
 我来答
My_Persistence
2018-01-17 · TA获得超过3467个赞
知道大有可为答主
回答量:1201
采纳率:81%
帮助的人:433万
展开全部
int a[3][4]; //假设定义一个3行4列的二维数组,所谓二维数组就是数组的数组
a[0]、a[1]、a[2]是数组a的元素,而这个元素是数组,而不是我们通常认为的基本数据类型的数据
所以*(a+i)就是获取数组a中第i个元素,等价于a[i],而a[i]本身又是一个包含有4个int型数值的数组,a[i]是这个一维数组的数组名,我们知道数组名的本质是一个地址,是数组首元素地址,所以
*(a+i)+j就是表示下表第i行的第j个元素的地址了。所以,
*(a+i)+j表示的含义是元素a[i][j]的地址,也可以用a[i]+j来表示。
听不清啊
高粉答主

2018-01-17 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
int a[2][3]={10,20,30,40,50,60};
printf("%d ",*(*(a+1)+2));
以上的引用能够输出60
因为a是二维数组名,所以它是指向指针的指针(二级指针)。
*(a+1)就是a[1],它是一个一维数组,也是一维数组的首地址(指向一维数组首元素的指针)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xl35800
2018-01-17 · TA获得超过3487个赞
知道小有建树答主
回答量:1152
采纳率:74%
帮助的人:308万
展开全部
*(a+0)取出a[0]的值
a[0]的元素又是一个一维数组
因此*(a+0)取出的就是这个一维元素的首地址
那么*(a+0)+0表示: 一维数组a[n]中, a+0数组元素a[0]的地址
*(a+0)+1表示一维数组的1号数组元素的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式