1

ここから、配列の名前は配列の最初の要素のアドレスであることを理解しているので、これは私にとって理にかなっています:

int nbrs[] = {1,2};
cout << nbrs << endl;   // Outputs: 0x28ac60

しかし、ここで のアドレスではなく、C 文字列全体が返されるのはなぜltrsですか?

char ltrs[] = "foo";
cout << ltrs << endl;   // Outputs: foo
4

3 に答える 3

8

iostream にはオーバーロードがあるためchar *、ポインターが参照するものを、\0.

アドレスを出力したい場合は、void *最初にキャストします。

于 2012-08-03T22:18:30.570 に答える
4

coutoperator<<()ポインタのアドレスを出力するのではなく、null 文字に到達するまで配列のすべての要素を出力するように、char* 配列をオーバーロードしました。

于 2012-08-03T22:18:52.683 に答える
2

cout、および一般に C++ ストリームは、特別な方法で C 文字列を処理できます。cout演算子<<は、>>さまざまなことを処理するためにオーバーロードされており、これはその 1 つです。

于 2012-08-03T22:18:41.873 に答える