Задать вопрос

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

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

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

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

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

Похожие вопросы