为什么std :: cout可以打印char []?

时间:2014-08-21 01:53:08

标签: c++ pointers char

下面的代码打印整个字符串。我很困惑为什么会这样做。

char test[] = "jeff";
cout<<test<<endl;

输出是&#34; Jeff&#34;,我期望它打印char数组的值&#34; test&#34;,因为test是指针,指针是第一个元素是&#39; J&#39;

当我cout<<test ??

时,为什么要打印整个字符串?

3 个答案:

答案 0 :(得分:7)

由于operator<< (basic_ostream<charT,traits>& os, const char* s);(#2&#34;字符序列&#34;在该列表中)(slightly more technical list)。 test衰减到指针或char*,然后将其打印为C字符串。

cout << "Jeff";工作的原因完全相同(而不是打印"Jeff"的地址。)

答案 1 :(得分:5)

第一个元素当然是'j',但char*并不仅仅代表一个char,而是代表stringcoutchar将继续阅读'\0'直到找到空字符,或"jeff"。当您使用诸如char之类的字符串文字时,会隐含地将其放在那里。

要仅打印第一个cout<<*test<<endl;,请取消引用指针以使其像{{1}}一样。

答案 2 :(得分:1)

在C ++中(如在C中),字符串被建模为NUL终止的字符数组,即最后一个字符的序数值为0,在您的示例中,它是带有索引4的字符,由编译器在最后一个“f”之后立即插入在“杰夫”。因此在许多情况下,指向“char”的指针被假定为NUL终止;在这种情况下,“cout”会一直打印字符,直到它在最后点击NUL字符,此时它会停止。 C ++还有一个实际的字符串类“std :: string”,它在很多方面都优于char数组。