看下面的例子说明以及输出。
#include <iostream>
using namespace std;
int main() {
int* a[3];
for (int i = 0; i < 3; ++i) {
a[i] = new int{i};
}
for (int i = 0; i < 3; ++i) {
cout << "数组第" << i << "元素的地址(从栈中分配的每个元素的地址):" << (a + i) << endl;
}
for (int i = 0; i < 3; ++i) {
cout << "数组第" << i << "元素的内容(元素指向一个在堆中的指针):" << a[i] << endl;
}
cout << "数组名 a 是第一个元素的地址:" << a << endl;
cout << "数组名的解引用( *a )是第一个元素的内容:" << *a << endl;
}
输出:
可见,我们有以下结论:
- 虽然每个元素没有名称,但每个元素都有由系统从栈中分配的地址;
- 每个元素的内容是我们从堆中申请的地址;
- 数组名的第一个元素的地址;
- 数组名的的解引用是第一个元素的内容;
- 数组可以作加法运算,每次加运算的结果偏置一个元素类型的大小。