[英]std::cout << cstring; prints value of cstring elements, not cstring hex address. Why?
我知道char數組與cstring不同,因為cstring中包含了后綴\\ 0 sentinel值。 但是,我也了解,對於cstring,char數組或任何其他類型的數組,程序中的數組標識符是指向該數組的指針。 因此,以下內容完全有效。
char some_c_string[] = "stringy";
char *stringptr;
stringptr = some_c_string; // assign pointer val to other pointer
我不明白的是為什么std::cout
自動假定我要輸出cstring或chars數組中的每個元素的值,而不是十六進制地址。 例如:
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 ++的標准。 但是有人可以在1)上擴展嗎? 2) std::cout
如何區分char / cstrings和其他數組。 我猜想它使用sizeof()
來查看它是一個單字節數組,並且每個數組元素的值都是一個ASCII int值,用於標識字符/字符串數組。
謝謝! :d
沒有任何幻想。 operator<<
對於char*
有特殊的重載,因此您可以執行std::cout << "Hello World";
。 從c ++的第一天開始就是這樣。
對於除char*
之外的任何內容,指針地址都顯示為十六進制。 如果要顯示char*
的地址,只需將其void*
為void*
,即
std::cout << (void*)"Hello World";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.