...我很难理解。希望C理解的深的给我详细解释解释。Thank you...
发布网友
发布时间:2024-10-23 22:35
我来回答
共3个回答
热心网友
时间:2024-10-25 00:02
分析一下:*(a+i)[j]。
1.首先,因为[]优先级(顶级)高于*(次顶级),所以应先算[]。所以先只看(a+i)[j]。
2.然后,这里一堆的东西不好看,做个简化:因为a是二维数组的名字,故a+i是第i行的行指针,相当于一个一位数组的数组名。把a+i记作x,那么(a+i)[j] 就可以记成 x[j]。
3.由取下标运算的含义:x[j]实际上是*(x+j),即先找地址后进行间接运算。而x是a+i,代进去就得到*(a+i+j)。记住,(a+i)[j]也是一个行指针。
4.把前面的*代进来,得到*(*(a+i+j)),实际上是a[i+j][0]。
热心网友
时间:2024-10-24 23:58
就是优先级问题啊 比如指针c, *c++跟*(c++)的值肯定不一样的
热心网友
时间:2024-10-24 23:59
就分析这一块吧:
(a+i)[j]
a实际上就是这个a数组的首地址
a+i就是这个首地址向后偏移了i*sizeof(int*)这么长的距离,对于执行过程来说,a+i 也是可以看做一个数组的首地址的,比如我们把这个首地址记做b,这样b[j]就可以等于b+j
所以:(a+i)[j] = b[j] = b + j = (a + i) + j
这个(a+i) + j 实际上是 a向后偏移 i*sizeof(int*)这么长的距离 再偏移 j*sizeof(int*)这么长的距离,所以可以写作 a+i+j
其实你将这些都从内存地址来理解应该比较容易些。
说得冗长,不知对你有帮助没有