ホームページ >バックエンド開発 >C++ >`cout` と `printf` を使用して C で関数ポインタを出力するにはどうすればよいですか?

`cout` と `printf` を使用して C で関数ポインタを出力するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 22:33:11196ブラウズ

How Do I Print Function Pointers in C   Using `cout` and `printf`?

cout と printf を使用した関数ポインタの出力

C では、関数ポインタは cout または printf を使用して出力できますが、動作は異なります。使用される形式指定子。

cout Operator

デフォルトでは、cout は関数ポインターをブール値として扱い、null 以外のポインターには 1 を、null ポインターには 0 を出力します。実際のアドレスを出力するには、明示的に void* にキャストする必要があります:

cout << (void *)pf;

printf Function

printf を %p 形式指定子とともに使用する場合、関数ポインターポインタとして扱われ、そのアドレスが出力されます。 hexadecimal:

printf("%p", pf);

ブール値としての関数ポインター

関数ポインターは、C では実際にブール値として扱われます。これは、ポインターを bool にキャストできるブール変換ルールによるもので、null 以外のポインターは true に評価され、null ポインターは false に評価されます。この動作は考慮しないと予期しないものになる可能性があります。

メンバー関数ポインター

メンバー関数ポインターの出力は、単純なポインターではないため、より複雑になります。ただし、次のトリックを使用してメンバー関数のアドレスを出力することは可能です。

cout << (void *)(*(int **)&pf);

これは、メンバー関数のアドレスが関数ポインターの 2 番目の要素に格納されているという事実を利用し、キャストします。それを void* にします。

以上が`cout` と `printf` を使用して C で関数ポインタを出力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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