文字ポインタを渡すときに、`cout` はアドレスを出力するか文字列を出力するかをどのように決定するのでしょうか?

Susan Sarandon
リリース: 2024-11-04 10:23:31
オリジナル
231 人が閲覧しました

How does `cout` decide whether to print the address or the string when you pass a character pointer?

Char ポインターのストリーム演算子のオーバーロードについて

printf() を使用して文字ポインターを出力する場合、変換指定子はアドレスか、アドレスの場合は %u、文字列の場合は %s など、文字列が出力されます。しかし、C ストリームと cout では、どちらを出力するかをどのように決定するのでしょうか?

次のコードを考えてみましょう:

<code class="cpp">char ch = 'a';
char *cptr = &ch;
cout << cptr << endl;
ログイン後にコピー

この例では、cout は cptr を文字列として解釈しようとします。 cout を使用して ch のアドレスを出力するには、この曖昧さを解決するために変換を適用する必要があります。

解決策: Void ポインターへのキャスト

cout を使用したアドレスは型キャストによるものです。正しいアプローチは次のとおりです:

<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>
ログイン後にコピー

cptr を void * にキャストすることで、cout に void ポインター (ostream& 演算子<< (ostream& o, const void *p) を受け取る適切なオーバーロードを強制的に実行させます。 ))。これにより、住所が意図したとおりに印刷されます。

以上が文字ポインタを渡すときに、`cout` はアドレスを出力するか文字列を出力するかをどのように決定するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!