引用数组的方法
ways to refer to an array
可能的重复项:
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]
仅引用数组中的第一个元素。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 复制几乎为空的数组的最快方法
- 通过JNI传递数据数组的最快方法是什么
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 数组元素打印的递归方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++数组队列实现方法错误
- 寻找一种更好的方法来表示无符号字符数组
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 创建异构顶点数据数组的可移植方法
- 打印字符数组地址的正确方法
- 还有其他方法可以在数组中写入多维数组吗?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案