プログラムが次のことに遭遇したときに、実行時にメモリに関して何をするのか知りたいです。
char chr = 'a';
char chrS[] = "a";
cout << "Address: " << &chr << endl;
cout << "Address: " << &chrS << endl;
これにより、次のようになります。
Address: a�c�3�
Address: 0x7fff33936280
「chr」のメモリアドレスが取得できないのはなぜですか?
プログラムが次のことに遭遇したときに、実行時にメモリに関して何をするのか知りたいです。
char chr = 'a';
char chrS[] = "a";
cout << "Address: " << &chr << endl;
cout << "Address: " << &chrS << endl;
これにより、次のようになります。
Address: a�c�3�
Address: 0x7fff33936280
「chr」のメモリアドレスが取得できないのはなぜですか?
(ここでの暗黙の追加)を&chr
生成し、それが文字列であると想定するため、null で終了しますが、そうではありません。char*
const
cout
ただし、&chrS
a が生成されますchar(*)[]
。これは a に減衰しないconst char*
ため、オーバーロードを介して出力されoperator<<(std::ostream&, const void*)
、アドレスが出力されます。
に対してこの動作が必要な場合const char*
は、明示的なキャストを実行する必要があります。C 文字列と単一文字へのポインタとの間に違いがないという事実は、C 文字列の主な欠陥の 1 つです。
試す
cout << "Address: " << hex << (long)(&chr) << endl;
それ以外の場合、char へのポインターを取得すると、文字列を指定していると見なされ、文字列として出力されます。