我正在学习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
但是,据我所知,onStack
和onHeap
都只是int
指针,对吗?我知道您不应该/不能真正使用sizeof()
运算符来获取数组的大小,但是出于好奇,为什么要根据数组是否打开来改变行为呢?堆还是堆上?
答案 0 :(得分:3)
否,onStack
是int[5]
,它会衰减到指针。它们不相同,因此存在sizeof
差异。
与堆栈和堆无关,实际上只是类型上的差异。