堆栈上数组与堆上数组的 sizeof()

sizeof() on arrays on stack vs. on heap

我正在学习 C++,我注意到 sizeof()-operator 在堆栈和堆上的数组上的工作方式不同。例如:

int onStack[5];
int* onHeap = new int[5];
std::cout << "sizeof(onStack)=" << sizeof(onStack) << std::endl;
std::cout << "sizeof(onHeap)=" << sizeof(onHeap) << std::endl;

生成输出

sizeof(onStack)=20
sizeof(onHeap)=4

然而,据我所知,onStackonHeap 都只是 int 指针,对吧?我知道你不应该/不能真正使用 sizeof() 运算符来获取数组的大小,但出于好奇,为什么它的行为会有所不同,具体取决于数组是否打开栈上还是堆上?

不,onStack 是一个 int[5] 到指针的衰减。它们不相同,因此存在 sizeof 差异。

与堆栈上和堆上无关,实际上只是类型差异。