如果我声明了两个数组,一个在堆栈上,一个在堆上,我在打印变量名时会有不同的行为(如果重要的话,在gdb中)。
int array_on_stack[5];
int * array_on_heap = new int[5];
现在在gdb中,我逐步执行每行代码,然后打印变量名,期望得到每个代码的内存地址。
print array_on_stack
print array_on_heap
但对于array_on_stack
,它会打印数组的内容而不是内存地址。为了获取内存地址,我需要命令print &array_on_stack
。这表明array_on_stack
不是指针。有人可以解释这两个声明在如何访问其内存地址方面的区别以及为什么会出现这种情况?
答案 0 :(得分:5)
您的array_on_heap
不是数组:它是指针(指向动态分配数组的第一项)。
数组是数组,指针是指针。
因此,您将在gdb中获得类似的结果
int* array_with_automatic_storage = &array_on_stack[0];