为什么对变量的引用有时会表现为大小为1的数组?

时间:2018-01-31 16:40:23

标签: c++ operator-precedence

#include <iostream>
using namespace std;

void outputFirst(int x[]) {
    cout << x[0] << endl;
}

int main() {
    int x = 40;

    // works
    outputFirst(&x);

    // works
    int *y = &x;
    cout << y[0] << endl;

    // invalid types ‘int[int]’ for array subscript
    cout << &x[0] << endl;

    return 0;
}

为什么我可以在将int传递给函数或将其分配给另一个变量时使用int作为数组的引用,而不是直接将其分配给另一个变量?

我正在使用g ++ - 6.3。

1 个答案:

答案 0 :(得分:5)

  

为什么我可以使用对int的引用

请注意,&x并不意味着引用x,而是taking the address of x,您将获得一个指针(即int*)它。所以int *y = &x;表示从x获取地址,然后y[0]表示获取指针指向的数组的第一个元素(就好像它指向仅包含数组的第一个元素)一个元素(即x)),所以最后它返回x本身。

关于&x[0]无效的原因,请注意operator[]的{​​{3}}高于operator&。然后&x[0]被解释为&(x[0]),而x[0]无效,因为x只是int

您应该添加括号以明确指定优先级,例如

cout << (&x)[0] << endl;