C++ 取消引用数组

201*_*ker 6 c++ arrays dereference

我从未读过任何有关取消引用数组(如指针)的内容,我相信它不应该起作用。但以下代码确实可以使用 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
Run Code Online (Sandbox Code Playgroud)

这是正确的行为还是只是编译器修复了代码?

Kei*_*son 5

您不能取消引用数组,只能取消引用指针。

这里发生的情况是,在大多数情况下,数组类型的表达式会隐式转换为(“衰减”为)指向数组对象第一个元素的指针。所以ar“衰变”为&ar[0];取消引用会得到 的值ar[0],这是一个int.

我最近的这个答案详细讨论了 C 的这一点。C++ 的规则类似,但 C++ 还有一些不发生转换的情况(这些情况都不会发生在您的代码中)。