堆中放置在堆上的数组中的值发生了什么

时间:2019-05-19 18:05:22

标签: c++ arrays pointers heap-memory

我想知道是否在C ++中的Heap上创建了一个数组,并将堆栈中的数据分配给Array,究竟发生了什么?数据复制到堆了吗?

代码片段:

int a = 1;
int b = 2;
int *c = new int(3);
int *arr = new int[3];
arr[0] = a;
arr[1] = b;
arr[2] = *c;

1 个答案:

答案 0 :(得分:0)

int a = 3; a的值为3。 a的内存地址是0x345A或类似的内容。 一个在堆栈上。

int *p = &a; 指针p被分配了a的地址。 p的内存地址是0x123B或类似的东西。该内存地址的值0x345A指向值3的存储位置。指针p在堆栈上。

如果打印3a,则会得到*p,因为它们是从相同的内存位置获取它们的值。

如果打印0x345A&a,则得到p,因为a的地址是p的值。

如果打印0x123B,则会得到&p,因为那是指针p的存储位置。

假设* c指向堆上的整数,则可以将c的值(这是堆上整数的内存地址)存储在数组中。

int *arr = new int[3];
...
arr[2] = c;

您不想做的是:

int foo = 10;
arr[2] = &foo;

现在,您的数组指向堆栈上的内存位置。只要您在该函数中就可以正常工作,但是在退出该函数并回收堆栈后将指向垃圾。