引用数组的方法

ways to refer to an array

本文关键字:方法 数组 引用      更新时间:2023-10-16

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

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

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

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

那么数组、&数组和 &array[0] 都引用了这个数组?

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

  • array就是这样:一个由 3 个整数组成的数组
  • &array的类型为 int (*)[3],一个指向数组的指针
  • &array[0]的类型int *,一个指向单个整数的指针

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

因此,如果array在值上下文中使用,&array[0]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("%zun", sizeof &array[0]); /* prints size of an "int *" */
printf("%zun", sizeof array); /* prints 3 times the size of an int */
printf("%zun", sizeof &array); /* prints size of pointer to an array[3] of int */

另请参阅:http://web.torek.net/torek/c/pa.html

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