注册 登录
编程论坛 C++教室

有关指针与二维数组的问题

iBreathebsb 发布于 2014-07-22 11:53, 709 次点击
这种理解是否正确?


a[0]和*(a+0)等价的:
首先a[0]是数组a[]中的第一个确切的元素,也就是这个数组元素的值。而a+0中,a是数组名,可以表示数组的第一个元素的地址,a+0仍然是第一个地址没变,于是取这个地址的值*(a+0),就是a[0]了,其中前面加个*号表示“取值运算”。
再来看*(*(a+i)+j):首先在二维数组中a[i]表示数组中第i行的首地址,即*(a+i)表示第i行0列的地址(即元素a[i][0]的地址),于是(*(a+i)+j)就表示a[i][j]的地址了,再在前面加个*号,就是取a[i][j]的值了.
5 回复
#2
lingyg2014-07-22 15:05
发表个人理解,请大家指正。感觉是这样的,难理解的地方在:a[i]等于*(a+i),表示的是第i行第0列的地址。要与1维数组区别开来,
#3
rjsp2014-07-22 15:12
『a[i]和*(a+i)等价的』这是C标准所规定好的
#4
rjsp2014-07-22 15:15
ISO/IEC 9899:201x 之 6.5.2.1 Array subscripting 有云:
The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).
#5
iBreathebsb2014-07-22 17:30
回复 2 楼 lingyg
有道理
#6
小旋风小王爷2014-07-30 15:08
我一直都是将[ ]等价*来理解的
1