簡體   English   中英

std :: cout << cstring; 打印cstring元素的值,而不是cstring十六進制地址。 為什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM