c语言中a+i是地址吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什么还是

地址?*(a+i)=a+i吗?,这不可能啊,还有,*(a+i)+j为什么也是地址?(a+i)+j是什么?求解。... 地址?*(a+i)=a+i吗?,这不可能啊,还有,*(a+i)+j为什么也是地址?(a+i)+j是什么?求解。 展开
 我来答
b_spike
推荐于2017-11-22 · TA获得超过3686个赞
知道大有可为答主
回答量:3724
采纳率:78%
帮助的人:1172万
展开全部
a+i其实就是&a[i],肯定是地址
*(a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组)
*(a+i)+j就是&a[i][j],如果数组a是二维数组那就肯定也是地址啦
a[i][j]则是表示为*(*(a+i)+j)
追问
还是不明白,a+i是指针那么二位数组a[i]是列指针那么*(a+i)为什么还等于a[i]?不应该是a+i等于a[i]吗?a+i和*(a+i)指针值为什么相同?为什么*(a+i)就是列指针而不是间接访问a+i?
追答
a[i]是行地址,也就相当于一维数组的数组名(数组名就是地址,因此它就是这一数据行的首地址)
这个地址也是存放在内存中的,列地址的集合就是另一个一维数组,即行数组,它是一个指针数组

a+i的值和*(a+i)的值不同,前者是&a[i],后者是&a[i][0],虽然都是地址,但却是两个不同的地址
你如果了解二给数组的存储结构,就会知道,它实际上只是一个一维指针数组(行数组,是一个常量指针数组,用来存储每行第0列的地址即行首地址),而这个数组里面每一个元素又是一个一维数组(准确地说就是数组名),这样的一维数组里面存储的才不是地址,而是具体的数值了
匿名用户
2016-05-05
展开全部
a应该是指的数组名字吧
你首先应该知道数组名字本身就是地址了
a+i是说a的地址向后在移动i个位置
也就是a[i]
a是指的数组的首地址,开头的位置
*(a+i) 也就是*a[i] 也就是a[i]的地址,只是这个地址离首地址偏移了i位置
再加上j 就是 a[i][j]地址
*(a+i)+j是针对二维数组来说的,也可以说是特殊的一维数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式