Следующая main()
это одна из моих попыток декодирования значения значений указателя:Что представляет собой шестнадцатеричный адрес C++?
int main(){
int a = 15, b = 27;
int *p = &a, *q = &b;
cout << p << ',' << q;
}
Два значения, напечатанные в шестнадцатиричном, а именно p = 0x28fef4, q = 0x28fef0
. Они выглядят как шестнадцатеричные значения, представляющие 2686708
и 2686704
в десятичной форме.
Возникает ряд вопросов, на которые вы можете ответить столько, сколько пожелаете.
Почему
q
меньшеp
? Я ожидаю, что память будет назначена в порядке возрастания, ноq < p
.Почему адреса редко меняются? Несколько лет назад я запускал аналогичную программу, и я помню, что этот адрес тоже был
0x28fef4
.Что представляет собой единица измерения в шестнадцатеричном значении? Немного? Байт?
У меня около 8 ГБ памяти (ОЗУ). Почему значения
p
иq
настолько малы по сравнению с моей емкостью памяти?
Не стесняйтесь отвечать на все или на все эти вопросы или предоставлять любую связанную информацию о указателях.
Спасибо.
Предполагаю, что я ожидал 'q'>' p', потому что я думаю о адресах, подобных коробке, или ведро. Вы заполняете '0x28fef4'' a', а затем кладете 'b' поверх него, еще 4 байта вверх. Я ищу физическую значимость числа '2686708'. Если я думаю об этом не так, как правильно об этом думать? – Johan
@DaaaahWhoosh Единица в шестнадцатеричном представлении - 4 бита. Байт обычно (но не всегда) 8 бит. –
@DaaaahWhoosh Одна единица в шестнадцатеричном представлении равна четырем в двоичном представлении. – Columbo