在二维数组a[ i ][ j ]中*(a+i)表示第i行的首地址,为什么不是表示第i行首元素呢?

请各位大侠说的具体点,
讲得深一点。
小弟在此特别感谢了。
从内存的角度说一下。

内存中顺序存放数组元素
数组名表示数组的首地址,a表示整个二维数组的首地址
你可以把二维数组a[ i ][ j ]当成i个大小为j的一维数组,因此对a取间接访问将会得到一个一维数组元素,仍然是一个地址。
这样第i行的首地址就是a[i],等价于*(a+i)
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-20
反过来思考一下:
如果 *(a+i) 是第i行的行首元素,那么第i行的第二个元素应该怎么表示呢?

a+i 和 *(a+i)虽然值相等,但是他们的意义是不同的
a+i 是数组指针的指针,p=a+i;p++;跳过一行
*(a+i)是指针,p=*(a+i);p++;跳过一列本回答被提问者采纳
第2个回答  2008-11-20
首先a声明的是一个二维数组,但这个只是形式,便于编程人员理解,但是实际在内存中存的还是顺序存放的,也就是说是一个连续的内存空间。
*(a+i)这个只是记录了第i个元素的首地址,当i+1的时候,其实是跳过了后面的j个元素,去访问i+1个元素。
所以你可以理解为是一个i行j列的矩阵。
*(a+i)只是表示i行的首地址。
*(*(a+i))这个表示的是第i行的首元素。

...二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+i)还表 ...
a是一个二维数组,a[i]表示其中的一行,是个一维数组,a[i][j]表示一行里面的一个元素。(a+i)就是a[i],是一个一维数组,当然表示一个地址,表示这个一维数组里面的第一个元素a[i][0]的地址。

在二维数组中为什么 *(a+i)+j 代表的是地址而不是值元素?
可以这么说吧, 在二维数组中,数组名a指向二维数组的第一行,就是&a[0]. a+i就是代表第i行地址,即&a[i]. 而*(a + i)是求第i行首元素的值,就是a[i]. 这时指针从指向行元素转为指向列元素.*(a + i)+j就是a[i]+j,是a[i][j]的地址. *(*(a + i)+j)是a[i][j]的值.

关于对数组元素a[i][j]的引用:*(*(a+i)+j)为什么也正确呢,*(a+i...
首先a是二维数组的首地址,也是二维数组第一行的首地址,是个常量指针,a[i]也是地址,表示第 i 行的地址,a+i表示相对于地址a偏移 i 个单位的地址,与a[i]等同,(a + i)表示对 相对于地址a偏移 i 个单位的地址 取内容,即表示对a[i] 的地址 再取内容,因为a[i] 与&a[i]等同...

二维数组中,a+i表示第i行的地址,那为什么*(a+i)也表示第i行的地址。
a+i和*(a+i)的值相同没错,但它们的类型不一样,代表的意义也不一样。a+i还是2维指针,*(a+i)则是一维指针。编译器对它们的解析和操作是不一样的。

在二维数组里 地址a[i]和地址*(a+i)的问题
a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.&a[i]是不一样的,首先,a[i]是...

a+ i是取二维数组a[ i][ j]的值吗?
是的,两种不同的写法,本质都是取那个地址存在的值。a[i][j]是第i行(0算起)第j列(0算起)的元素值。a+i是第i行的行指针,那么*(a+i)就是第i行第0个元素的指针,自然*(a+i)+j就是第i行的第j个元素的指针了,最后通过这个指针用*取出来的值*(*(a+i)+j)不就是第i行第j列的...

数组与指针联合使用的疑惑
int (*)[6],即它是指向一个数组的指针,对这样的指针进行加法运算是:a + i 实际计算为 a + i * 6 * sizeof(int)。a指向第一行数组首地址,a + i 就指向第i行首地址,而不是将a扁平化成一维数组后的第i个元素地址。所以 a[i] = * (a + i) 对二维数组依然成立。

c语言指针*(*(a+i)+j)什么意思,*(a+i)为什么是地址啊,a不应该已经是地 ...
其实是可以把*(*(a+i)+j)看出是二维数组的一个值:a[i][j]。(a+i)看出a[i]这是一维地址,a是二维地址。对于a+1不好判断,以数组解释不通,以指针又解释德通,我就不评价了。

c语言二维数组里(a+i)[j]表示的是地址还是值?
(a+i)[j]表示地址。a[i]表示第i行的首地址。a[i]+j表示第i行j列元素的地址。(a[i]+j)代表i行j列元素的值。

二维数组中*(a+i)是什么意思
在C语言中规定,数组名代表的是数组首元素地址。a是二维数组的数组名,因此,在二维数组中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。

相似回答