让我们看一下下面的例子
int x[10];
cout<<x<<endl;
cout<<&x<<endl; //both couts are same.
int x;
cout<<x<<endl;
cout<<&x<<endl; //last two couts are different.
Run Code Online (Sandbox Code Playgroud)
这可能是什么原因?
在第一种情况下,
cout << x << endl;
Run Code Online (Sandbox Code Playgroud)
数组x衰减到指向其第一个元素的指针.所以你看到了那个地址.在第二种情况:
cout << &x << endl;
Run Code Online (Sandbox Code Playgroud)
您正在查看阵列的地址.这恰好与数组的第一个元素的地址相同,尽管它指的是包含所有元素的更大空间.它不一定要打印相同,但在你的实现(以及我曾经使用的每个实现),它确实.
当您int在下一节中处理单个时,第一种情况不会衰减到指针,它只是打印整数的值.当您将其更改为时&x,您明确要求该整数的地址.