ここから、配列の名前は配列の最初の要素のアドレスであることを理解しているので、これは私にとって理にかなっています:
int nbrs[] = {1,2};
cout << nbrs << endl; // Outputs: 0x28ac60
しかし、ここで のアドレスではなく、C 文字列全体が返されるのはなぜltrs
ですか?
char ltrs[] = "foo";
cout << ltrs << endl; // Outputs: foo
iostream にはオーバーロードがあるためchar *
、ポインターが参照するものを、\0
.
アドレスを出力したい場合は、void *
最初にキャストします。
cout
operator<<()
ポインタのアドレスを出力するのではなく、null 文字に到達するまで配列のすべての要素を出力するように、char* 配列をオーバーロードしました。
cout
、および一般に C++ ストリームは、特別な方法で C 文字列を処理できます。cout
演算子<<
は、>>
さまざまなことを処理するためにオーバーロードされており、これはその 1 つです。