是cplusplus.com错了吗?指针和字符串文字

时间:2016-04-03 01:29:15

标签: c++ c++11 visual-c++ c++14

this page "Pointers and string literals" section网站上说const char * foo = "hello";,当我们输出foo时,它会返回字符串文字的地址,我在家里尝试了这个,但我得到了"hello",当我做*foo我也得到"hello"时,我的问题是网站错了吗?

enter image description here

1 个答案:

答案 0 :(得分: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