gpt4 book ai didi

c++ - cout <<与char *参数一起输出字符串,而不是指针值

转载 作者:行者123 更新时间:2023-12-02 10:33:22 30 4
gpt4 key购买 nike

这个:

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

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

最佳答案

这样做的原因是std::cout将把char *当作指向C样式字符串(第一个字符)的指针,并照此打印。如果要使用该地址,则可以将其强制转换为未经这种处理的指针,例如:

cout << (void *) terry;

(如果担心释放常量,则可以使用 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 *>丢弃常量(这就是 const_cast的用途)。这是较新的C++强制转换进行的检查之一,而旧样式的强制转换没有此限制。

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

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