char ポインターを扱う場合、さまざまな環境でそれらがどのように処理されるかを理解することが重要です。 %u および %s 変換指定子を指定した print() は、アドレスまたは文字列の出力を制御しますが、cout を使用するときに問題が発生します。
次のコード スニペットを考えてみましょう。
<code class="cpp">char ch = 'a'; char *cptr = &ch; cout << cptr << endl;
ここでは、必要な出力は、cptr に保存されている ch のアドレスです。ただし、デフォルトでは、cout は cptr を通常の文字列として扱い、そのアドレスの代わりに文字 'a' を出力する傾向があります。
この問題を修正するには、次のことが必要です。 cout が cptr を char ポインターではなく void ポインターとして解釈するように強制します。これにより、特に void ポインターを処理し、そのアドレスを出力する ostream& 演算子を利用できるようになります。
これを実現するには、次のようにキャストを利用できます。
<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>
cptr を a にキャストすることで、 void ポインターの場合、オーバーロード解決により正しい演算子が選択され、目的のアドレスが出力されます。
以上がchar ポインタを扱うときに `cout` がアドレスではなく文字を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。