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] ,怎么回事,谢谢 展开
&(&a[0][0])+i等于&(&a[0][i]) *和&抵消,所以*(a+i)等价于&a[0][i] 两个不相等啊,一个是&a(i)(0),一个是&a[0][i] ,怎么回事,谢谢 展开
2个回答
展开全部
注意方括号和小括号。一维二维不要混淆。
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]
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]
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询