[英]How does std::cout work with char pointers?
最近我一直在學習 C++ 指針,我對 char 感到困惑。
char *c = "sampletext";
cout<< *c <<endl;
cout<< c <<endl;
cout<< &c <<endl;
更准確地說:為什么cout<< c <<endl;
打印整個 C 字符串而不是地址(例如,它發生在 int 指針中),以及為什么cout<< *c <<endl;
打印第一個字母而不是整個 C 字符串。 先感謝您
發生這種情況是因為編譯器檢查參數的類型並調用接收該類型的運算符的重載版本。
在 C 語言中,字符串實現為char
arrays 以'\0'
(nul) 字符結尾,並且 arrays 使用指針引用。 因此,當收到的參數是c
時,接收char*
的重載運算符將數組的內容打印到 nul 終止符。
當接收到的參數是*c
時,這會取消引用訪問其數據的指針,並且由於這是指向char
的指針,因此接收char
的重載運算符將其打印為單個char
。
要打印字符串數組的地址,可以將char*
指針強制轉換為void*
,如下所示:
std::cout << (void*) c << std::endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.