、表現「T
へのポインタ」型の表現に(「崩壊」)に変換するタイプ「T
のN
-elementアレイ」の式の値は配列の最初の要素のアドレスになります。
これは、ステートメント
cout << greeting << endl;
に発現greeting
がタイプchar *
の発現にタイプchar [6]
の式から変換され、式の値が、最初の要素のアドレスであることを意味します。
ストリーム演算子<<
は、それがタイプchar *
の引数を受信した場合、それは0ターミネーターを見るまで、それはそのアドレスから始まる文字の配列を書き込むように定義されます。どのように動作するのかという単純な例があります:
std::ostream& operator<<(std::ostream& s, char *p)
{
while (*p)
s.put(*p++);
return s;
}
実際のオペレータ定義はもう少し複雑になりますが、それは基本的な考え方です。あなたがgreeting
のちょうど最初の文字を印刷したい場合は
は、明示的にインデックスまたはその逆参照しなければならない:
cout << greeting[0] << endl;
または
cout << *greeting << endl;
"H"のみを表示する理由を明確にしてください。 'greeting [0]'ではない 'greeting'を印刷しています – vu1p3n0x
' greeting'は 'char *'というポインタに崩壊し、それが指し示す文字列全体が表示されます。最初の文字だけを印刷したい場合は 'cout << greeting [0] << endl;を使います。 – Unimportant
これはcoutが文字列を表示する方法です... greetingは文字列なので、coutは "Hello"を表示しますが、 "greeting [0]"と書くと、coutは文字として 'H'を表示します。 – Shiv