c语言书上说a(i)和*(a+i)等价,我觉得不对啊

书上说a(i)和*(a+i)等价,我觉得不对啊,a(i)等价于&a(i)(0)a+i等价于&(&a[0][0])+i等于&(&a[0][i])*和&抵消,所以*(a+i)... 书上说a(i)和*(a+i)等价,我觉得不对啊,a(i)等价于&a(i)(0) a+i等价于
&(&a[0][0])+i等于&(&a[0][i]) *和&抵消,所以*(a+i)等价于&a[0][i] 两个不相等啊,一个是&a(i)(0),一个是&a[0][i] ,怎么回事,谢谢
展开
 我来答
金色潜鸟
2014-01-31 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5584万
展开全部
注意方括号和小括号。一维二维不要混淆。

c语言 语句中,方括号 不是标点符号,而是 运算符.
c语言 语句中,有恒等式: a[i] = *(a+i)

a[i][j] 等于 (a[i])[j] 套恒等式公式,化成 ( *(a+i) )[j], 再化成 * (*(a+i) + j);
类似地 a[j][i] 等于 (a[j])[i],套恒等式公式,化成 ( *(a+j) )[i] ,再化成 * (*(a+j) + i);

求地址 用 & 运算:
1 维:& (a[i]) = & ( *(a+i) ); 注意 &* 抵消, 得 &a[i] = (a+i )
2维; &(a[i][j]) = (*(a+i) + j);
2维; &(a[j][i]) = (*(a+j) + i);
===============================
2 维:
a(i)等价于&a(i)(0) --- 不是小括号,是方括号,
用于2 维 下标变量时的 a[i] 等价于 &a[i][0]
a[i] 是第 i 行 的 首地址,等价于 &a[i][0]
運命に抗おう4a2
2014-01-30 · TA获得超过607个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:124万
展开全部
书上是对的,你的理解完全错了。
a[i]并不等价于&a[i][0]。
&a[0]等价于a;
&a[i]等价于a+i
同时取值
*(&a[i])等价于*(a+1);
其中*(&a[i])的*&抵消就是你书上说的 a[i]等价于*(a+1);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式