Отображение адреса строки

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

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?

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

или так:

std::cout << "Pointer address = " << &hello[0] << std::endl;

Ответ 4

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

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