为什么C语言中二维数组的数组名a和*a表示的是同一个值?

2024年11月28日 10:48
有5个网友回答
网友(1):

当定义二维数组a[M][N]时,数组名可以认为是二维指针,其指向二维数组的首地址。
于是a的值就是首地址的值。
而*a,就是a[0],a[0]是第一行的标记,代表第一行的首地址。
在二维数组中,所有元素都是紧密排列的,这样整个数组的首地址,第一行的首地址,和第一个元素的首地址,即a, a[0], &a[0][0] 都是相同的。
于是a和*a的值是相同的。

网友(2):

当a是二维数组名时,a即&a[0],而*a即a[0]

两者的显式的值是相同的,但是基类型是不同的

网友(3):

*a表示数组的第一个元素的值,而二维数组的第一个元素是一个一维数组。这个一维数组的首地址是a[0],所以a = *a = a[0] = &a[0][0]

网友(4):

两个的地址相同

网友(5):

首先 a[0] 和 *(a+0)等价,且 a[i]只是一个地址(如同一维数组名 只是一个指针常量)
这些你得知道。
在a[][m]中,  
a为二维数组名,值为0行首地址;
a[0] 和 *a 为      0行0列的地址。

*(a[i]+j)和*(*(a+i)+j) 才是 a[i][j]的值。