xmz*_*ang 2 c++ arrays dynamic-arrays
#include<iostream>
using namespace std;
int main()
{
int* q = new int[3];
cout << &q[0] << endl;
cout << q << endl;
cout << &q << endl; // why here is different?
int p[3];
cout << &p[0] << endl;
cout << p << endl;
cout << &p << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,我使用new来创建动态数组,但是数组地址真的让我很困惑,为什么&q不一样?
表达式&q是一个指向变量 的指针q,它确实和 whereq所指向的不同。
你可以这样看:
+----+ +---+ +------+------+------+ | &q | --> | | | --> | q[0] | q[1] | q[2] | +----+ +---+ +------+------+------+
另一方面p是一个数组, where&p是指向数组本身的指针:
+----+ +------+------+------+ | &p | --> | p[0] | p[1] | p[2] | +----+ +------+------+------+
&q和之间也有很大的语义差异&p:它们的类型。
的类型&q是int**,&p而是类型int (*)[3]。
这也解释了为什么&p并且&p[0]似乎是相同的,它们都指向同一个位置。但这里也有语义差异,类型&p[0]是int*。
最后,数组可以衰减为指向其第一个元素的指针,这意味着它p与 相同&p[0],甚至具有相同的类型。