std::cout << 字符串;打印 cstring 元素的值,而不是 cstring 十六进制地址。为什么?
std::cout << cstring; prints value of cstring elements, not cstring hex address. Why?
我知道字符数组不同于 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 [=12=]
char *stringptr;
stringptr = some_c_string;
int intArray[3] = {1, 2, 4};
cout << some_c_string << endl << charArray << endl
<< stringptr << endl << intArray << endl;
将导致输出:
stringy
Hello
stringy
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";
我知道字符数组不同于 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 [=12=]
char *stringptr;
stringptr = some_c_string;
int intArray[3] = {1, 2, 4};
cout << some_c_string << endl << charArray << endl
<< stringptr << endl << intArray << endl;
将导致输出:
stringy
Hello
stringy
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";