Я пытаюсь вернуть адрес указателя, используя приведенный ниже код:возвращая адрес указателя
#include <iostream>
using namespace std;
int main(){
int x = 5;
int *p = &x;
//int **pp = &p;
cout << &p << endl;
return 0;
}
Однако то, что печатается на 0x28fea8, который тот же адрес, х сам. Теперь, если я раскомментирую только прокомментированную строку выше и оставлю все остальное как есть, то то, что печатается, - это 0x28fea4, который кажется правильным адресом указателя.
Мой вопрос, почему мне нужна линия без ранений, чтобы отобразить правильный адрес моего указателя?
Почему "соиЬ < < < < р" и End L, "соиЬ < < & р < < ENDL" как дисплей 0x28fea8, если эта линия слева комментировал?
не должны "соиЬ < < & р < < ENDL" дисплей 0x28fea4 независимо от другой линии?
Я использую Qt Creator в качестве моего компилятора/ide, если это помогает. Я загрузил свой компилятор по следующей ссылке: http://web.stanford.edu/~rawatson/qt/windows_install/index.html
EDIT: Хорошо, как меня глупо. Моя проблема заключалась в том, что я сравнивал адреса, меняя значения, а затем снова запускаю программу. Вместо этого я должен был сравнить, распечатав их все в одном прогоне программы. Когда я сравниваю в одной программе, я получаю разные адреса для p и & p, как и должно быть.
Можете ли вы добавить используемые флагов компилятора в свой пост? Ваш пример отлично работает на G ++ 4.8.4 на Ubuntu с -O3: я получаю два разных выхода, когда я печатаю p и когда я печатаю & p. – Cheiron
'Однако то, что печатается ... - это тот же адрес, что и сам x.' [False.] (Http://rextester.com/RZRVU60305)' p' и '& x' - то же самое. '& p' отличается, поскольку природа предназначена. –
Возможно, это мой компилятор, я обновил сообщение со ссылкой на то, откуда я его загрузил. –