C++取消引用数组
C++ Dereferencing Arrays
我从未读过任何关于取消引用数组(如指针)的内容,我认为它不应该起作用。但以下代码使用QT Creator和g++4.8确实有效:
int ar[9]{1,2,3,4,5,6,7,8,9};
cout << *ar << endl; //prints the first element of ar
这是正确的行为还是只是编译器修复了代码?
不能取消引用数组,只能取消引用指针。
这里发生的情况是,在大多数上下文中,数组类型的表达式被隐式转换为("decays"为)指向数组对象第一个元素的指针。因此ar
"衰变"为&ar[0]
;取消引用,为您提供ar[0]
的值,即int
。
我最近的回答为C详细讨论了这一点。C++的规则是相似的,但C++还有一些没有发生转换的情况(这些都没有发生在代码中)。
这是正确的。获取并取消引用内存位置,因此前4个字节是整数。您可以执行*(ar+1)来获取第二个内存位置,取消引用,然后再次获取前4个字节。4字节,因为如果您的机器是32位并且sizeof(int)==4 ,则它是int
我认为这是正确的行为。指向数组的指针总是从数组的开头开始,也就是第一个元素。在这种情况下,它将是"ar[0]",并且输出应该是"1"。
相关文章:
- 通过指针与数组引用扩展数组索引序列
- 将链表的内容放在数组引用中
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- C 在将数组引用分配给struct时麻烦
- Typedef数组引用
- 通过强制转换创建子数组引用
- 将数组引用 'T(&)[n]' 引用到 'std::array<T, n>' 的内容
- constexpr 数组引用参数
- 寻找有关函数定义和原型中数组引用的说明
- Initializer_list作为非模板上下文中数组引用参数的参数
- 如何使用一个动态创建的一维数组的二维数组引用仅与标准库?
- 如何返回具有大小的POD数组引用
- 在C++中返回数组引用的语法
- 是否可以声明转换函数返回数组引用而不使用typedef
- 自定义到数组引用的转换
- 类数组引用的NullReferenceException
- 数组指针与数组引用之间的差异
- 在c++中传递数组引用
- 使用特征矩阵作为特征数组引用的参数
- 如何从函数传递数组引用