这样做的原因是std::cout将 achar *视为指向 C 样式字符串(的第一个字符)的指针并将其打印出来。如果您想要该地址,则可以将其转换为未以这种方式处理的指针,例如:

cout << (void *) terry;

(或者const void *如果您担心抛弃 constness,则使用演员表,在这种特殊情况下这不是问题)。

如果您是纯粹主义者而不是实用主义者,您还可以使用 C++ static_cast,如下所示:

cout << static_cast (terry);

尽管在这种特殊情况下没有必要,但转换为 avoid *将正常工作。以下示例代码显示了所有这些选项的作用:

#include

int main (void) {

const char *terry = "hello";

std::cout << terry << '\n';

std::cout << (void *) terry << '\n';

std::cout << (const void *) terry << '\n';

std::cout << static_cast (terry) << '\n';

return 0;

}

输出(地址在您的环境中可能不同):

hello

0x8048870

0x8048870

0x8048870

请注意,在使用 时static_cast,您应该确保不要尝试用static_cast ( 这就是const_cast目的) 抛弃 constness。这是较新的 C++ 转换所做的检查之一,而旧式转换没有此限制。