Отображение адреса строки - PullRequest
17 голосов
/ 21 февраля 2012

У меня есть этот код:

char* hello = "Hello World";
std::cout << "Pointer value = " << hello << std::endl;
std::cout << "Pointer address = " << &hello << std::endl;

И вот результат:

Pointer value = Hello World
Pointer address = 0012FF74

Когда я выполняю отладку в моей программе, используя OllyDbg, я вижу, что значение 0x0012FF74, например,0x00412374.

Можно ли как-то напечатать фактический адрес, на который указывает hello?

Ответы [ 4 ]

31 голосов
/ 21 февраля 2012

Если вы используете &hello, он печатает адрес указателя, а не адрес строки. Приведите указатель к void*, чтобы использовать правильную перегрузку operator<<.

std::cout << "String address = " << static_cast<void*>(hello) << std::endl;
6 голосов
/ 21 февраля 2012

У меня нет компилятора, но, вероятно, работает следующее:

std::cout << "Pointer address = " << (void*) hello << std::endl;

Причина: использование только hello будет рассматривать как строку (массив символов), приведя его к пустому указателю, он будет показан как шестнадцатеричный адрес.

2 голосов
/ 21 февраля 2012

или около того:

std::cout << "Pointer address = " << &hello[0] << std::endl;
0 голосов
/ 29 сентября 2014

Это также работает:

std::cout << "Pointer address = " << (int *)hello << std::endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...