gpt4 book ai didi

c++ - cout << with char* 参数打印字符串,而不是指针值

转载 作者:IT老高 更新时间:2023-10-28 13:58:48 25 4
gpt4 key购买 nike

这个:

const char * terry = "hello";
cout<<terry;

打印 hello 而不是 'h' 的内存地址。为什么会这样?

最佳答案

原因是std::cout将处理 char *作为指向 C 样式字符串(的第一个字符)的指针并按原样打印。如果你想要 address 代替,你可以将它转换为一个 那样处理的指针,例如:

cout << (void *) terry;

(如果您担心放弃 constness,则使用 const void * 类型转换,在这种特殊情况下这不是问题)。


如果你是一个纯粹主义者而不是实用主义者,你也可以使用 C++ static_cast ,大致如下:

cout << static_cast <const void *> (terry);

虽然在这种特殊情况下没有必要,但转换为 void *会正常工作。以下示例代码显示了所有这些选项的实际作用:

#include <iostream>
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<const void *> (terry) << '\n';
return 0;
}

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

hello
0x8048870
0x8048870
0x8048870

请注意,当使用 static_cast ,你应该确保你不要试图用 static_cast <void *> 来抛弃 constness (这就是 const_cast 的用途)。这是较新的 C++ 转换所做的检查之一,而旧式转换没有此限制。

关于c++ - cout << with char* 参数打印字符串,而不是指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17813423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com