我被困在字符串和数组中

Pra*_*ngh -2 c c++ arrays string

我遇到过一个c ++代码:

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
cout << "Greeting message: ";
cout << greeting << endl;
Run Code Online (Sandbox Code Playgroud)

输出: Hello

由于问候语是大小为6的阵列,显示问候应该只显示"H",因为greeting[0]cout,因为它是显示阵列的第一个地址.我不知道我哪里错了.

Joh*_*ode 7

除非它是sizeof或一元运算&符的操作数,否则类型为" -element array of " 的表达式将被转换("decay")为"指向" 的类型的表达式,并且表达式的值将是地址数组的第一个元素.NTT

这意味着在声明中

cout << greeting << endl;
Run Code Online (Sandbox Code Playgroud)

表达式greeting从类型的表达式转换为类型char [6]的表达式,表达式char *的值是第一个元素的地址.

<<定义流运算符,使得如果它接收到类型的参数char *,它将写出从该地址开始的字符序列,直到它看到0终结符; 这是一个如何工作的简单例子:

std::ostream& operator<<( std::ostream& s, char *p )
{
  while (*p)
    s.put( *p++ );
  return s;
}
Run Code Online (Sandbox Code Playgroud)

真正的运算符定义会有点复杂,但这是基本的想法.

如果要打印出第一个字符greeting,则必须明确索引或取消引用它:

cout << greeting[0] << endl;
Run Code Online (Sandbox Code Playgroud)

要么

cout << *greeting << endl;
Run Code Online (Sandbox Code Playgroud)