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