在this page "Pointers and string literals" section網站說const char * foo = "hello";
,當我們做的輸出foo的,它應當返回字符串文字的地址,我想這在家裏,但我得到"hello"
,當我做*foo
我也得到"hello"
,我的問題是網站錯誤?是cplusplus.com錯誤?指針和字符串
1
A
回答
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/。內容是正確的,沒有錯。
+0
謝謝,現在我明白了 – szd116
相關問題
- 1. 指針,字符串和溢出錯誤
- 2. 指針和字符串處理錯誤
- 3. C++字符串:指針錯誤無效
- 4. C字符串和指針
- 5. 字符串和指針
- 6. 指針和字符串
- 7. C字符串和指針
- 8. 字符串指針和strcpy
- 9. 指針和字符的分段錯誤
- 10. 字符指針和字符串
- 11. Ç指定字符串指針到其他字符串指針
- 12. C - If/Else和指針返回錯誤的字符串
- 13. 字符串指針
- 14. C指針,指向和字符串
- 15. 指針指向字符串和STRCMP
- 16. 使用字符指針的字符串複製錯誤
- 17. C++指向字符串類型分段錯誤的指針
- 18. 轉換指針的地址字符串和分配字符串ADRESS爲指針?
- 19. 複製字符串指針,指針
- 20. 獲取指針,而不是字符串
- 21. 字符串和指針問題
- 22. 字符串和指針位置
- 23. C++中的字符串和指針
- 24. C++字符串和指針混淆
- 25. 指針和字符串,沒有對EOF
- 26. 指針和字符串處理
- 27. 字符串數組和指針
- 28. 玩指針,昏迷和char *字符串
- 29. 指針與java和字符串變量
- 30. C++字符串和指針操縱
你是怎麼做的輸出?當你輸出一個指向'char'的指針(即它們輸出的是地址,而不是地址本身)時,需要幾個輸出方法才能正確執行。 – Peter
我做了cout << foo,它給了我「你好」,是運營商<< overloaded – szd116
@ szd116'cout << static_cast(foo);'將輸出指針的值,即它指向的地址。 'operator <<'爲'char *'重載,並將其作爲c風格的字符串。 –
songyuanyao