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

Har*_*ham 3 c++ pointers char

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

char test[] = "jeff";
cout<<test<<endl;
Run Code Online (Sandbox Code Playgroud)

输出是"Jeff",我期望它打印char数组"test"的值,因为test是指针,指针是'J'的第一个元素.

为什么我打印整个字符串,当我cout<<test

Cor*_*lks 7

因为operator<< (basic_ostream<charT,traits>& os, const char* s);(该列表中的#2"字符序列"(略多于技术列表).test衰减到一个指针,或者char*然后打印成一个C字符串.

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


Gut*_*der 5

'j'当然,第一个要素是,但char*并不仅仅代表一个char,而是代表string它们中的一个.cout将继续读取char直到它找到空字符,或'\0'.当你使用字符串文字时,这是隐含的"jeff".

要仅打印第一个char,请取消引用指针以使其像cout<<*test<<endl;.

  • 从技术上讲,`test`不是`char*`.它*衰减*为`char*`.(我知道你没有明确说明它是一个`char*`,但它听起来像你暗示它) (2认同)
  • @HarshanandNyshadham:从技术上讲,`test`是一个数组(如Chris所提到的).它的类型是`char [5]`. (2认同)