1

可能重复:
C:为什么数组的地址等于它的值?

有人可以帮我解释数组衰减吗?具体来说,我对 1) 数组如何引用自身感到困惑,以及 2) 当我定义

int array[] = { 45, 67, 89 };

那么array、&array、&array[0]都指的是这个数组?我发现它们在打印时显示为相同的输出,但它们是否也在内存中指代完全相同的东西?

4

3 回答 3

8

那么array、&array、&array[0]都指的是这个数组?

内存位置相同,但类型不同。

  • array就是这样:一个由 3 个整数组成的数组
  • &array有类型int (*)[3],一个指向数组的指针
  • &array[0]有类型int *,一个指向单个整数的指针
于 2012-10-13T05:30:09.337 回答
2

array, 在值上下文中是 a 类型int *,并且指针指向数组的第一个元素。&array, 是“指向数组 [3] 的指针”类型,int并指向整个array. &array[0]类型为int *,并指向数组的第一个元素。

因此,与在值上下文中使用if&array[0]相同。在值上下文中不使用的一种情况是在运算符中。所以:将不同于.arrayarrayarraysizeofsizeof arraysizeof &array[0]

举个例子:

int array[] = { 45, 67, 89 };
int *pa = array; /* pa is now pointing to the first element of "array" */
int *pb = &array[0]; /* pb is also pointing to the same */
int (*pc)[3] = &array; /* pc points to the whole array.
                          Note the type is not "int *" */

printf("%zu\n", sizeof &array[0]); /* prints size of an "int *" */
printf("%zu\n", sizeof array); /* prints 3 times the size of an int */
printf("%zu\n", sizeof &array); /* prints size of pointer to an array[3] of int */

另见:http ://web.torek.net/torek/c/pa.html

于 2012-10-13T05:33:35.100 回答
0

它们都引用相同的内存位置,但差别不大。array&array从第一个元素的地址开始引用整个数组,而&array[0]仅引用数组中的第一个元素。

于 2012-10-13T05:32:15.157 回答