関数ポインターとデータ ポインターが C/C で互換性がない理由
データ ポインターと関数ポインター間の変換は、ほとんどのプラットフォームで通常成功しますが、互換性は保証されません。これにより、次のような疑問が生じます。両方がメモリ アドレスを指していることを考えると、互換性は簡単ではないでしょうか?
その説明は、コンピューティング システムで採用されているアーキテクチャにあります。 C/C は特定のアーキテクチャに制限されず、メモリの管理方法を柔軟に行うことができます。ハーバード アーキテクチャなどの一部のアーキテクチャは、コードとデータ用に別個のメモリ空間を維持します。対照的に、フォン ノイマン アーキテクチャは、コードとデータを同じメモリに保存します。
コードとデータが同じ空間に存在するフォン ノイマン アーキテクチャの場合、関数ポインタとデータ ポインタの間の変換は、可能。ただし、実際の互換性は当然のものではありません。ハーバード アーキテクチャなど、2 つのメモリ空間を区別するシステムでは、変換は失敗します。
以上がC/C では関数ポインタとデータ ポインタに常に互換性がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。