ホームページ > バックエンド開発 > C++ > C ではすべてのポインターは同じサイズですか?

C ではすべてのポインターは同じサイズですか?

Mary-Kate Olsen
リリース: 2024-10-31 00:14:30
オリジナル
813 人が閲覧しました

 Are All Pointers the Same Size in C  ?

C ではすべてのポインターは同じサイズですか?

C ではすべてのポインターが均一のサイズを共有するかどうかという疑問が生じます。よく想定されていますが、C 標準はこの問題について決定的な洞察を提供します。

C 標準仕様

C 標準は次のことを明示的に保証します。

  • void と char は同じサイズです (セクション [basic.compound]/5)。
  • 同じ型の異なる cv 修飾バージョンへのポインター (T const, T volatile と T const volatile*) は同じサイズ ([basic.compound]/3) を共有します。
  • 基礎となる型が同じである列挙型へのポインターは同じサイズになります (セクション [dcl.enum] /9).

実際的な考慮事項

実際には、クラス型へのポインターは通常、同じサイズを維持します。これは、コンパイラーが T を完全に定義せずに T* のサイズを決定する必要があるという要件によるものです。コンパイラーはポインターのサイズ設定にある程度の柔軟性を持っていますが、現実のシナリオではこれが実行されることはほとんどありません。

さらに、関数ポインター、データ メンバーへのポインター、および関数メンバーへのポインターは通常、同じサイズです。これにより、これらのポインタ型間でシームレスな reinterpret_casting が可能になります。

例外

セグメント化されたアーキテクチャでは、注目すべき例外が 1 つ発生します。ここでは、near ポインタと far ポインタのサイズが異なる場合があります。このケースは、ポインター サイズの均一性に関する通常の規則に反しています。

結論

C 標準では、void* および cv 修飾されたポインターのサイズが均一であることを明確にしています。一般に、異なる型へのポインターは同じサイズを継承しますが、実際的な考慮事項では、クラス型へのポインター、関数ポインター、およびデータ メンバーへのポインターはすべて統一されたサイズを共有することが示唆されています。ただし、セグメント化されたアーキテクチャには例外があり、near ポインターと far ポインターのサイズが異なる可能性があります。

以上がC ではすべてのポインターは同じサイズですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート