Адреса указателей?

cout <<"значение= "<< *b <<"\tадрес= 0х"<<b<<"  =0x"<< &b<< endl;

Помогите разобраться с отображением адреса указателя. При компиляции строчки выходит следующий результат
3cbec5ac478e4119b924ac3f0229c273.png
Последние адреса кто за что отвечает? Почему они разные?
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C++
Потому что указатели - прежде всего такие же переменные, как и любые другие (это очень важно понимать). Второе выведенное значение - это значение переменной b, и не особо важно, указатель это или нет (в нашем случае - да, указатель, и поэтому выведенное значение переменной b - некоторый адрес). Третье выведенное значение - это АДРЕС переменной b, и не имеет значения, что за тип у переменной b. Вы можете объявить int b или float b, и получите аналогичный результат.

Вот что является отличительным моментом указателя - это как раз таки первое выведенное значение, а точнее, сама возможность его вывести. Для указателей (а также для любых пользовательских типов, реализующих operator*) доступна операция разыменования. Это дает возможность взять значение переменной b, интерпретировать его как адрес, а затем, в свою очередь, залезть в память по этому адресу и получить значение уже оттуда. В данном случае можно утверждать, что по адресу 0x011CD1C0 находится значение 66 (если его интепретировать соответственно типу указателя).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
потому что первый адрес - это адрес ячейки памяти, по которому хранится значение 66
второй адрес - это адрес ячейки памяти, по которому хранится адрес другой ячейки памяти, по которому хранится значение 66
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы