C数组定义的问题.

来源:百度知道 编辑:UC知道 时间:2024/05/16 15:58:56
下面几种定义方法我看不懂.不像a[i][j]那样好理解哪位教下或说几个也行.谢谢

a数组已经定义.

&a[0][0]+4*i+j
a[0]+4*i+j

*(a[i]+j)
*(*(a+i)+j)
(*(a+i))[j]
*(&a[0][0]+4*i+j)
主要是过程哦.

&a[0][0]+4*i+j //数组的首地址偏移4*i+j,即a[0][4*i+j]的地址
a[0]+4*i+j //a[4*i+j]的地址
*(a[i]+j) //a[i]是第i行的首地址,加j是指偏移j,*(a[i]+j)等同于a[i][j]
*(*(a+i)+j) //a[i][j]
(*(a+i))[j] //a[i][j]
*(&a[0][0]+4*i+j)//a[0][4*i+j]

这个讲起来比较麻烦,你可以找本书好好研究一下,一般的c++入门的书都会讲:数组与指针

a[0][0]是二维数组首元素,4应该是列数,4*i+j就是元素a[i][j]离首地址的距离a[0]和&a[0][0]一样,是数组首地址。
a[i]是第i行的首地址,*(a[i]+j)是第j个元素,*(a+i)和a[i]一样 ,所以 *(*(a+i)+j)和*(a[i]+j) 一样,(*(a+i))[j] 和a[i][j]一样