gpt4 book ai didi

c++ - std::cout << 字符串;打印 cstring 元素的值,而不是 cstring 十六进制地址。为什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:26 27 4
gpt4 key购买 nike

我知道字符数组不同于 cstring,因为在 cstring 中包含后缀\0 标记值。然而,我也明白,在 cstring、字符数组或任何其他类型的数组的情况下,程序中的数组标识符是指向数组的指针。所以,下面是完全有效的。

char some_c_string[] = "stringy";
char *stringptr;
stringptr = some_c_string; // assign pointer val to other pointer

我不明白的是,为什么 std::cout 自动假设我想输出每个元素的值在 cstring 或字符数组中,而不是十六进制地址。例如:

char some_c_string[] = "stringy"; // got a sentinel val
char charArray[5] = {'H','e','l','l','o'}; // no space for sentinel val \0
char *stringptr;
stringptr = some_c_string;
int intArray[3] = {1, 2, 4};

cout << some_c_string << endl << charArray << endl
<< stringptr << endl << intArray << endl;

将导致输出:
粘稠的
你好
粘稠的
0xsomehexadd

所以对于 cstring 和 char 数组,std::cout 给了我每个元素的值,而不是像 int 数组那样的十六进制地址。我想为了方便起见,这已成为 C++ 中的标准。但是有人可以扩展 1) 当这成为标准时。 2) std::cout 如何区分 char/cstrings 和其他数组。我猜它使用 sizeof() 来查看它是一个单字节数组,并且每个数组元素的值是一个 ASCII int 值来标识一个 chars/cstring 数组。

谢谢! :D

最佳答案

没有什么特别的事情发生。 operator<<char* 有一个特殊的重载, 这样你就可以做 std::cout << "Hello World"; .从学习 C++ 的第一天起就是这样。

除了char*之外的任何东西,指针地址显示为十六进制。如果你想显示一个char*的地址, 只需将其转换为 void* , 即

std::cout << (void*)"Hello World";

关于c++ - std::cout << 字符串;打印 cstring 元素的值,而不是 cstring 十六进制地址。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33322787/

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