首页 > 解决方案 > C语言中&array和&array[0]的区别

问题描述

考虑到这个声明:

整数数组[] = ....;

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

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

标签: carrayspointers

解决方案


尝试“之间的差异'A'65LL65.0

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

&array现在“和之间的差异&array[0]

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

int a[] = {1,2,4};
// &a is a `pointer to array 3 of int`

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

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

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


推荐阅读