我从未读过任何有关取消引用数组(如指针)的内容,我认为它不应该起作用。但以下代码在使用 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
这是正确的行为还是只是编译器修复了代码?
最佳答案
您不能解引用数组,只能解引用指针。
这里发生的是,在大多数上下文中,数组类型的表达式被隐式转换为(“衰减”为)指向数组对象第一个元素的指针。所以ar
“衰减”为&ar[0]
;为您提供 ar[0]
值的取消引用,它是一个 int
。
This recent answer of mine针对 C 对此进行了一些详细讨论。C++ 的规则类似,但 C++ 还有一些不发生转换的情况(您的代码中都没有发生)。
关于C++ 解引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533128/