ホームページ > バックエンド開発 > C++ > C ではポインターは常に同じサイズになりますか?

C ではポインターは常に同じサイズになりますか?

Mary-Kate Olsen
リリース: 2024-10-28 22:42:02
オリジナル
652 人が閲覧しました

 Do Pointers Always Have the Same Size in C  ?

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

この質問は議論の対象となっており、一部の情報源はすべてのポインターが同じであると主張しています。

C 標準によれば、

  • void は以下と同じサイズであることが明示的に保証されています。 char
  • CV 修飾ポインター (例: T const、T volatile、T const volatile) は T
  • 基になる型が同じである列挙型へのポインタは同じサイズになります
標準ではすべてのポインタが同じサイズであるとは明示的には規定されていませんが、実際にはすべてのクラス型へのポインタが同じであることが一般的に当てはまります。 、関数ポインター、データ メンバー ポインター、および関数メンバー ポインターは同じサイズです。

ただし、コンパイラーには技術的にトリックが許可されているため、この仮定は 100% 保証されません。たとえば、特定のプレフィックスで始まるクラスに対して、またはそれらのクラスに対してガベージ コレクションを実装することにした場合、より長いポインターを作成できます。

実際のシナリオでは、コンパイラーがこの自由を利用する可能性はほとんどありません。したがって、開発者は一般に、異なるクラス型および上記の他の型へのポインターは同じサイズであると想定できます。さらに確実性を高めるために、static_assert ステートメントを実装して、潜在的な違反にフラグを立てることができます。

ただし、near ポインターと far ポインターを持つセグメント化されたアーキテクチャでは、これらのタイプのポインターのサイズが同じでない可能性があります。これは、ポインターのサイズが均一であるという通常のルールの例外として機能します。

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

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