2016-04-03 54 views
1

this page "Pointers and string literals" section網站說const char * foo = "hello";,當我們做的輸出foo的,它應當返回字符串文字的地址,我想這在家裏,但我得到"hello",當我做*foo我也得到"hello",我的問題是網站錯誤?是cplusplus.com錯誤?指針和字符串

enter image description here

+1

你是怎麼做的輸出?當你輸出一個指向'char'的指針(即它們輸出的是地址,而不是地址本身)時,需要幾個輸出方法才能正確執行。 – Peter

+0

我做了cout << foo,它給了我「你好」,是運營商<< overloaded – szd116

+0

@ szd116'cout << static_cast (foo);'將輸出指針的值,即它指向的地址。 'operator <<'爲'char *'重載,並將其作爲c風格的字符串。 – songyuanyao

回答

1

下面的代碼說明了一切。

const char *foo = "hello"; 
cout << static_cast<const void *>(foo) << endl; //result is address of "hello" 
cout << foo << endl; //result is "hello" 
cout << *foo << endl; // result is 'h' 

cout << static_cast<const void *>(foo)調用以下函數。

_Myt& __CLR_OR_THIS_CALL operator<<(const void *_Val) 

cout << foo調用以下函數。

template<class _Traits> inline 
    basic_ostream<char, _Traits>& operator<<(
     basic_ostream<char, _Traits>& _Ostr, 
     const char *_Val) 

cout << *foo調用以下函數。

template<class _Traits> inline 
    basic_ostream<char, _Traits>& operator<<(
     basic_ostream<char, _Traits>& _Ostr, char _Ch) 

注意上述被調用函數的最後一個參數。
以下快照來自http://www.cplusplus.com/doc/tutorial/pointers/。內容是正確的,沒有錯。 enter image description here

+0

謝謝,現在我明白了 – szd116