C 中 &array 和 &array[0] 的区别

Fre*_*red 4 c arrays pointers

考虑到这个声明:

int 数组[] = ....;

我知道&array[0]将第一个元素的地址作为其值。

但是&array呢?我在我的程序中尝试了这个,它还返回了第一个元素的地址。那么有什么区别呢?

chu*_*ica 6

尝试“'A'65LL之间的区别65.0

所有这些都具有彼此相等的值(假设为 ASCII),但类型不同,并且可能具有不同的位宽度和编码。

现在“&array&array[0]”之间的区别

两者的值彼此相等,因为指向内存中的同一位置,但它们的类型不同:指向int数组的指针与指向int.

int a[] = {1,2,4};
// &a is a `pointer to array 3 of int`
Run Code Online (Sandbox Code Playgroud)

这种类型差异的一个常见影响是指针数学

printf("%p\n", (void*) (&a[0] + 1));  // next `int` address
printf("%p\n", (void*) (&a + 1));     // one past end of array address
Run Code Online (Sandbox Code Playgroud)

[高级]:虽然这两个指针通常采用相同的编码和大小,但在 C 中,它们的编码和大小也可能不同,但仍然指向相同的地址。