ホームページ  >  記事  >  バックエンド開発  >  文字ポインタを渡すときに、`cout` はアドレスを出力するか文字列を出力するかをどのように決定するのでしょうか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 10:23:31232ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。