2016-07-23 5 views
-5

когда я делаю этоC++ указатели кучи странные вещи?

int* pointer = new int; 
    int* pointer2 = new int; 

Я полагаю, эти два указателя находятся рядом друг с другом в памяти моего компьютера (они 4 байта друг от друга), так в теории два указатели должны иметь разницу из 4, но когда я показываю указатели он показывает это:

0x6000227e0 
0x600022800 

, которая является разностью 2 таким образом, что означает, что Int 2 байта? Неправильно ли моя логика?

+1

Выравнивание в сторону, как это имеет значение '2' на самом деле? –

+1

Они имеют разность 0x20 или, в десятичной, 32. поэтому есть много «комнаты» между ними. –

ответ

4

Нет, это разница в 32 байта, а не два байта. Разница равна 0x20 в шестнадцатеричной форме или 32 в десятичной системе.

Кроме того, вы даже не гарантируете, что объекты будут выделены последовательно, в памяти.

Другими словами, эти адреса памяти абсолютно ничего не означают.

+0

Настоящий спасибо !! – gigi

Смежные вопросы