2012-02-21 62 views
15

我有这样的代码:显示字符串的地址

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指向的实际地址?

回答

23

如果您使用&hello它打印指针的地址,而不是字符串的地址。将指针投射到void*以使用operator<<的正确超载。

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

我没有编译器,但可能是以下工作:

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

原因:只使用打招呼就治疗是一个字符串(char数组),通过将其强制转换为void指针将是显示为十六进制地址。

2

左右:

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

这也适用于:

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

请加一些解释,以及如果可能的话。 – 2014-09-29 03:11:38

+1

如果'hello'未正确对齐'int',则可能会导致未定义的行为。考虑到'void *'的版本有效,没有任何理由使用它。 – 2014-09-29 03:26:02