我理解字符数组与cstring不同,因为cstring中包含后缀\0前哨值。但是,我也理解,对于cstring、chars数组或任何其他类型的数组,程序中的数组标识符是指向数组的指针。所以,下面是完全有效的。
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;将导致输出:stringy Hello stringy 0xsomehexadd
因此,对于cstring和char数组,std::cout给出了每个元素的值,而不是与int数组一样的十六进制地址。为了方便起见,我想这成为了C++中的一个标准。但是,当这成为标准的时候,能不能请人扩展一下。2) std::cout如何区分char/cstring和其他数组。我猜它使用sizeof()来查看它是一个由单个字节组成的数组,每个数组元素的值是一个ASCII值,用于标识chars/cstring数组。
谢谢!:D
发布于 2015-10-24 20:24:31
没有什么好想象的。operator<<为char*提供了一个特殊的重载,因此您可以执行std::cout << "Hello World";。从c++的第一天起就这样了。
对于除char*之外的任何内容,指针地址都显示为十六进制。如果您想显示char*的地址,只需将其转换为void*
std::cout << (void*)"Hello World";https://stackoverflow.com/questions/33322787
复制相似问题