C ではすべてのポインターは同じサイズですか?
C ではすべてのポインターが均一のサイズを共有するかどうかという疑問が生じます。よく想定されていますが、C 標準はこの問題について決定的な洞察を提供します。
C 標準仕様
C 標準は次のことを明示的に保証します。
実際的な考慮事項
実際には、クラス型へのポインターは通常、同じサイズを維持します。これは、コンパイラーが T を完全に定義せずに T* のサイズを決定する必要があるという要件によるものです。コンパイラーはポインターのサイズ設定にある程度の柔軟性を持っていますが、現実のシナリオではこれが実行されることはほとんどありません。
さらに、関数ポインター、データ メンバーへのポインター、および関数メンバーへのポインターは通常、同じサイズです。これにより、これらのポインタ型間でシームレスな reinterpret_casting が可能になります。
例外
セグメント化されたアーキテクチャでは、注目すべき例外が 1 つ発生します。ここでは、near ポインタと far ポインタのサイズが異なる場合があります。このケースは、ポインター サイズの均一性に関する通常の規則に反しています。
結論
C 標準では、void* および cv 修飾されたポインターのサイズが均一であることを明確にしています。一般に、異なる型へのポインターは同じサイズを継承しますが、実際的な考慮事項では、クラス型へのポインター、関数ポインター、およびデータ メンバーへのポインターはすべて統一されたサイズを共有することが示唆されています。ただし、セグメント化されたアーキテクチャには例外があり、near ポインターと far ポインターのサイズが異なる可能性があります。
以上がC ではすべてのポインターは同じサイズですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。