Heim  >  Artikel  >  Backend-Entwicklung  >  Sind in C alle Zeiger gleich groß?

Sind in C alle Zeiger gleich groß?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 00:14:30739Durchsuche

 Are All Pointers the Same Size in C  ?

Haben alle Zeiger in C die gleiche Größe?

Es stellt sich die Frage, ob alle Zeiger in C eine einheitliche Größe haben. Obwohl es oft angenommen wird, liefert der C-Standard definitive Einblicke in diese Angelegenheit.

C-Standardspezifikationen

Der C-Standard garantiert ausdrücklich:

  • void und char haben die gleiche Größe (Abschnitt [basic.compound]/5).
  • Zeiger auf verschiedene CV-qualifizierte Versionen desselben Typs (T const, T volatile und T const volatile*) haben die gleiche Größe ([basic.compound]/3).
  • Zeiger auf Enum-Typen mit identischen zugrunde liegenden Typen haben die gleiche Größe (Abschnitt [dcl.enum] /9).

Praktische Überlegungen

In der Praxis behalten Zeiger auf Klassentypen im Allgemeinen identische Größen bei. Dies liegt an der Anforderung, dass der Compiler die Größe von T* bestimmen muss, ohne T vollständig zu definieren. Während Compiler eine gewisse Flexibilität bei der Zeigergröße haben, wird diese in realen Szenarien selten ausgeübt.

Zusätzlich Funktionszeiger , Zeiger auf Datenelemente und Zeiger auf Funktionselemente haben normalerweise die gleiche Größe. Dies ermöglicht eine nahtlose Neuinterpretation zwischen diesen Zeigertypen.

Ausnahmen

Eine bemerkenswerte Ausnahme tritt in segmentierten Architekturen auf, bei denen Nah- und Fernzeiger unterschiedlich groß sein können. Dieser Fall widerspricht den üblichen Regeln für die Einheitlichkeit der Zeigergröße.

Schlussfolgerung

Der C-Standard stellt klar, dass void*- und cv-qualifizierte Zeiger eine einheitliche Größe haben. Während Zeiger auf verschiedene Typen im Allgemeinen die gleiche Größe erben, legen praktische Überlegungen nahe, dass Zeiger auf Klassentypen, Funktionszeiger und Zeiger auf Datenelemente alle eine einheitliche Größe haben. Eine Ausnahme stellen jedoch segmentierte Architekturen dar, bei denen Nah- und Fernzeiger möglicherweise unterschiedliche Größen haben.

Das obige ist der detaillierte Inhalt vonSind in C alle Zeiger gleich groß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn