我知道在二维静态数组arr中,arr与arr [0],&arr [0],&arr [0] [0]相同,但是我无法找到为什么* arr < / p>
答案 0 :(得分:3)
让我们看一个简单的二维“数组”(数组数组)及其在内存中的外观。
首先是数组:
int a[2][2];
以及它在内存中的外观(带有一些指针):
+---------+---------+---------+---------+ | a[0][0] | a[0][1] | a[1][0] | a[1][1] | +---------+---------+---------+---------+ ^ | &a | &a[0] | &a[0][0]
对此,应该很容易理解为什么指针相同。
要继续,请不要忘记所有数组都可以衰减到指向其第一个元素的指针。也就是说,对于上面的数组a
,a
等于&a[0]
。这意味着*a
等于*&a[0]
,由于*
和&
运算符相互抵消,因此等于a[0]
。而且由于a[0]
是一个数组,它将衰减到一个指向等于&a[0][0]
的第一个元素的指针。也就是说,*a
等于&a[0][0]
。