看下面的例子说明以及输出。
#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;
}
输出:

可见,我们有以下结论:
- 虽然每个元素没有名称,但每个元素都有由系统从栈中分配的地址;
- 每个元素的内容是我们从堆中申请的地址;
- 数组名的第一个元素的地址;
- 数组名的的解引用是第一个元素的内容;
- 数组可以作加法运算,每次加运算的结果偏置一个元素类型的大小。
深入理解C++数组与内存分配:地址、内容与操作
本文详细解析了C++中数组的内存分配原理,展示了栈上元素地址的获取、堆中地址的指向,以及数组名的特殊用法。通过实例揭示了数组作为基础数据结构的重要操作特性。
1566

被折叠的 条评论
为什么被折叠?



