为什么打印char *会给出字符串而不是地址?

时间:2016-03-19 18:10:13

标签: c++ string pointers

我正在学习学习C ++的基础知识,但在尝试解读关于字符和指针的以下内容时,一直在敲打墙。包括行注释,使我目前了解正在发生的事情。鉴于我有如下代码:

    using namespace std;
    int main()
    {
          //String literal is an array of chars
          //Array address gets assigned to a ptr of char
          char myletters[] = {'h','i'};
          char* lp = myletters;
          cout << *lp << endl;

          //Logically equivalent to above statements
          char* letters2 = "hi";
          cout << *letters2 << endl;

          //String literal turns into array of chars
          //Array of chars gets assigned to a ptr of chars 
          //Each ptr of chars gets stored into letters array
          char* letters[] = {"hi","hello"};
          cout << *letters << endl;   
    }

我的输出将是:

h
h
hi

我的问题是:当我使用最后的cout来打印*字母的内容时,为什么我会得到字符串&#34; hi&#34;而不是&#34; hi&#34;或者&#34;中的第一个字符的地址&#34;?我知道cout的第一次使用是打印一个char,而最后一个cout正在打印一个char *,但是我仍然想知道为什么它打印完整的字符串而不是地址,就像我通常期望的指针一样

非常感谢。

1 个答案:

答案 0 :(得分:0)

<<运算符有char*的特殊定义,用于打印它所引用的C字符串。

在您的情况下,*letterschar*类型(字母为char*[],与char**相同)而不是char*lp