堆栈上的值会发生什么,将其放在堆上的数组中

What happens to values on the stack that get placed in array on the Heap

本文关键字:数组 什么 堆栈      更新时间:2023-10-16

我想知道我是否在C 的堆上创建一个数组,然后将数据从堆栈分配到数组,到底会发生什么?数据是否复制到堆?

代码片段:

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;

int a = 3;a具有3。A的内存地址为0x345a或类似的内容。a在堆上。

int *p = &a;指针P分配了a的地址。P的内存地址为0x123b或类似的内存。该内存地址保留值0x345a指向值3的位置。指针P在堆上。

如果您打印a*p,您将获得3,因为它们是从同一内存位置获得的值。

如果您打印&ap,您将获得0x345A,因为A的地址为P值。

如果打印&p,您将获得0x123B,因为这是指针p。

的内存位置

假设 *c指向堆上的整数,您可以将C的值存储在数组中。

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

您不想做的是:

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

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

相关文章: