为什么在二维静态数组arr中,arr与* arr

时间:2018-12-10 21:55:40

标签: c

我知道在二维静态数组arr中,arr与arr [0],&arr [0],&arr [0] [0]相同,但是我无法找到为什么* arr < / p>

1 个答案:

答案 0 :(得分:3)

让我们看一个简单的二维“数组”(数组数组)及其在内存中的外观。

首先是数组:

int a[2][2];

以及它在内存中的外观(带有一些指针):

+---------+---------+---------+---------+
| a[0][0] | a[0][1] | a[1][0] | a[1][1] |
+---------+---------+---------+---------+
^
|
&a
|
&a[0]
|
&a[0][0]

对此,应该很容易理解为什么指针相同。

要继续,请不要忘记所有数组都可以衰减到指向其第一个元素的指针。也就是说,对于上面的数组aa等于&a[0]。这意味着*a等于*&a[0],由于*&运算符相互抵消,因此等于a[0]。而且由于a[0]是一个数组,它将衰减到一个指向等于&a[0][0]的第一个元素的指针。也就是说,*a等于&a[0][0]