为什么在堆栈上声明的数组变量名不是指针 C++?

Why is variable name of array declared on stack not a pointer C++?

如果我声明两个数组,一个在栈上,一个在堆上,打印变量名时我会得到不同的行为(如果重要的话在 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_heap 不是数组:它是一个指针(指向动态分配数组的第一项)。

数组是数组,指针是指针

因此您将在 gdb 中得到类似的结果

int* array_with_automatic_storage = &array_on_stack[0];