下面的代码打印整个字符串。我很困惑为什么会这样做。
char test[] = "jeff";
cout<<test<<endl;
输出是&#34; Jeff&#34;,我期望它打印char数组的值&#34; test&#34;,因为test是指针,指针是第一个元素是&#39; J&#39;
当我cout<<test
??
答案 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
,而是代表string
个cout
。 char
将继续阅读'\0'
直到找到空字符,或"jeff"
。当您使用诸如char
之类的字符串文字时,会隐含地将其放在那里。
要仅打印第一个cout<<*test<<endl;
,请取消引用指针以使其像{{1}}一样。
答案 2 :(得分:1)
在C ++中(如在C中),字符串被建模为NUL终止的字符数组,即最后一个字符的序数值为0,在您的示例中,它是带有索引4的字符,由编译器在最后一个“f”之后立即插入在“杰夫”。因此在许多情况下,指向“char”的指针被假定为NUL终止;在这种情况下,“cout”会一直打印字符,直到它在最后点击NUL字符,此时它会停止。 C ++还有一个实际的字符串类“std :: string”,它在很多方面都优于char数组。