【发布时间】:2017-03-01 03:56:31
【问题描述】:
如果我声明两个数组,一个在堆栈上,一个在堆上,我在打印变量名时会得到不同的行为(如果重要,在 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 不是指针。有人能解释一下这两个声明在如何访问它们的内存地址方面的区别以及为什么会这样吗?
【问题讨论】:
-
那是因为它们不一样,一个是指针,一个是数组;它们是不同的东西。
-
这表明 array_on_stack 不是指针 你是对的。数组不是指针。指针是指针,数组是数组。就像
ints 不是doubles。
标签: c++ arrays pointers heap-memory stack-memory