可能重复:
C:为什么数组的地址等于它的值?
有人可以帮我解释数组衰减吗?具体来说,我对 1) 数组如何引用自身感到困惑,以及 2) 当我定义
int array[] = { 45, 67, 89 };
那么array、&array、&array[0]都指的是这个数组?我发现它们在打印时显示为相同的输出,但它们是否也在内存中指代完全相同的东西?
可能重复:
C:为什么数组的地址等于它的值?
有人可以帮我解释数组衰减吗?具体来说,我对 1) 数组如何引用自身感到困惑,以及 2) 当我定义
int array[] = { 45, 67, 89 };
那么array、&array、&array[0]都指的是这个数组?我发现它们在打印时显示为相同的输出,但它们是否也在内存中指代完全相同的东西?
那么array、&array、&array[0]都指的是这个数组?
内存位置相同,但类型不同。
array
就是这样:一个由 3 个整数组成的数组&array
有类型int (*)[3]
,一个指向数组的指针&array[0]
有类型int *
,一个指向单个整数的指针array
, 在值上下文中是 a 类型int *
,并且指针指向数组的第一个元素。&array
, 是“指向数组 [3] 的指针”类型,int
并指向整个array
. &array[0]
类型为int *
,并指向数组的第一个元素。
因此,与在值上下文中使用的if&array[0]
相同。在值上下文中不使用的一种情况是在运算符中。所以:将不同于.array
array
array
sizeof
sizeof array
sizeof &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 */
它们都引用相同的内存位置,但差别不大。array
并&array
从第一个元素的地址开始引用整个数组,而&array[0]
仅引用数组中的第一个元素。