4

プログラムが次のことに遭遇したときに、実行時にメモリに関して何をするのか知りたいです。

char chr = 'a';
char chrS[] = "a";
cout << "Address: " << &chr << endl;
cout << "Address: " << &chrS << endl;

これにより、次のようになります。

Address: a�c�3�
Address: 0x7fff33936280

「chr」のメモリアドレスが取得できないのはなぜですか?

4

2 に答える 2

12

(ここでの暗黙の追加)を&chr生成し、それが文字列であると想定するため、null で終了しますが、そうではありません。char*constcout

ただし、&chrSa が生成されますchar(*)[]。これは a に減衰しないconst char*ため、オーバーロードを介して出力されoperator<<(std::ostream&, const void*)、アドレスが出力されます。

に対してこの動作が必要な場合const char*は、明示的なキャストを実行する必要があります。C 文字列と単一文字へのポインタとの間に違いがないという事実は、C 文字列の主な欠陥の 1 つです。

于 2012-08-18T03:33:03.617 に答える
0

試す

cout << "Address: " << hex << (long)(&chr) << endl;

それ以外の場合、char へのポインターを取得すると、文字列を指定していると見なされ、文字列として出力されます。

于 2012-08-18T03:35:46.487 に答える