数组的变量名和该数组的地址有什么区别?
What's the difference between the variable name of an array and the address of that array?
在C 中,以下代码将编译:
int a[5];
int (*b)[5] = &a;
虽然这不会:
int a[5];
int (*b)[5] = a;
编译第二个时,G 给了我一个错误,说"不能将'int*"转换为'int(*([5]'在初始化中。
但是,我认为a
和&a
是一样的,因为
std::cout << a << std::endl;
和
std::cout << &a << std::endl;
产生相同的结果。
显然, a
之间存在差异,即数组变量的名称和 &a
,即该数组的地址。但是有什么区别?
在c和c 中,一个表达式中的数组衰减到指向其第一个元素的指针。因此,在您几秒钟的示例中,左侧用int*在右侧进行初始化。
它们的值(他们指向的地址(相等,但它们的类型不同:
- (在这种情况下(
a
是(int [5]
腐烂到(int *
。 -
&a
是int (*)[5]
如果您声明int x;
,则可以观察到例如&x
和(char *)&x
。
相关文章:
- 通过JNI传递数据数组的最快方法是什么
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 当 std::move 与 C 样式数组或不移动对象时会发生什么
- 当该数组的索引中没有元素时,指针指向什么?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 从字符数组的元素中减去'a'是什么意思
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 字符数组前面的加号是什么意思?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在C++中,建议通过数组循环的方式是什么?
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- C++数组中的初始值设定项是什么?
- 如果我在字符数组上使用 close() 会发生什么?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 将 std::unique_ptr 重置为指向数组的指针有什么问题?