1

char 変数のアドレスを表示するにはどうすればよいですか? 型キャストを使用して、最初に int または float または void などに変換し、ポインターを使用してアドレスを表示する解決策を見つけました。しかし、型キャストなしで特定のソリューションに代わるものはありますか? のようなポインタを使用して

char var = 'a'; 
char* ptr; 
ptr = &var; 
cout << ptr;

ただし、この場合、ポインタも var のアドレスを指していますが、var の値が表示されます。なぜ?もしそうなら、ポインタを使って var のアドレスを取得するにはどうすればよいでしょうか? 型キャストを使用せずに

cout << "Address of var = " << static_cast<void*>(&var)  << endl;

または、特定の問題のために任意の演算子をオーバーロードする必要がありますか?

4

1 に答える 1

8

キャストを記述する必要がある唯一の理由は、指定されたポインターが文字のゼロで終了する配列の最初の要素を指していると想定し、その配列がゼロになるまで喜んでトラバースしようとするstd::ostream特別なオーバーロードがあるためです。char *

残念ながら、これは単純に 1 文字のアドレスを渡し、そのアドレスの値を出力することはできないことを意味します。そのため、キャストが必要になります。他のすべての (文字以外の) ポインターについては、std::ostream既にポインター値の数値表現を出力します。

「できる」ことは何もありませんが、解決策をすでに発見しているので、実際には問題はありません。一般的な設定でオブジェクト ポインターを出力したい場合は、キャストを追加するだけでvoid *、すべての入力タイプで機能します。の動作std::ostreamは、特定のユース ケースをより詳細に記述することを犠牲にして、大多数のユース ケースを簡単に機能させるための便宜上の設計選択の結果です。

于 2014-10-04T10:03:51.727 に答える