这样做的原因是std::cout将 achar *视为指向 C 样式字符串(的第一个字符)的指针并将其打印出来。如果您想要该地址,则可以将其转换为未以这种方式处理的指针,例如:
cout << (void *) terry;
(或者const void *如果您担心抛弃 constness,则使用演员表,在这种特殊情况下这不是问题)。
如果您是纯粹主义者而不是实用主义者,您还可以使用 C++ static_cast,如下所示:
cout << static_cast
尽管在这种特殊情况下没有必要,但转换为 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
return 0;
}
输出(地址在您的环境中可能不同):
hello
0x8048870
0x8048870
0x8048870
请注意,在使用 时static_cast,您应该确保不要尝试用static_cast