#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。
答案 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;