Отображение адреса строки
У меня есть этот код:
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;