我想知道是否在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;
答案 0 :(得分:0)
int a = 3;
a的值为3。
a的内存地址是0x345A或类似的内容。
一个在堆栈上。
int *p = &a;
指针p被分配了a的地址。 p的内存地址是0x123B或类似的东西。该内存地址的值0x345A指向值3
的存储位置。指针p在堆栈上。
如果打印3
和a
,则会得到*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;
现在,您的数组指向堆栈上的内存位置。只要您在该函数中就可以正常工作,但是在退出该函数并回收堆栈后将指向垃圾。