我有这段代码:
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
指向的实际地址吗?
答案 0 :(得分:30)
如果使用&hello
,则会打印指针的地址,而不是字符串的地址。将指针投射到void*
以使用operator<<
的正确重载。
std::cout << "String address = " << static_cast<void*>(hello) << std::endl;
答案 1 :(得分:6)
我没有编译器,但可能有以下工作:
std::cout << "Pointer address = " << (void*) hello << std::endl;
原因:只使用hello会将其视为字符串(char数组),通过将其转换为void指针,它将显示为十六进制地址。
答案 2 :(得分:2)
左右:
std::cout << "Pointer address = " << &hello[0] << std::endl;
答案 3 :(得分:0)
这也有效:
std::cout << "Pointer address = " << (int *)hello << std::endl;