堆栈上的数组vs.堆上的数组的sizeof()

时间:2019-03-03 13:27:55

标签: c++ arrays stack heap sizeof

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

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()运算符来获取数组的大小,但是出于好奇,为什么要根据数组是否打开来改变行为呢?堆还是堆上?

1 个答案:

答案 0 :(得分:3)

否,onStackint[5],它会衰减到指针。它们不相同,因此存在sizeof差异。

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