sizeof () для массивов в стеке и в куче - PullRequest
0 голосов
/ 03 марта 2019

Я изучаю 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() для получения размера массива, но просто из любопытства, почему он ведет себя по-разному, в зависимости от того, находится ли массив в стекеили в кучу?

1 Ответ

0 голосов
/ 03 марта 2019

Нет, onStack - это int[5], который распадается на указатель.Они не одинаковы, отсюда и разница sizeof.

Ничего общего в стеке с кучей, на самом деле это просто разница типов.

...