28 Stimmen

sizeof void Zeiger

Warum ist sizeof leerer Zeiger 2 ?

51voto

JaredPar Punkte 699699

Die Größe eines void* ist ein plattformabhängiger Wert. Normalerweise beträgt der Wert 4 oder 8 Bytes für 32- bzw. 64-Bit-Plattformen. Wenn Sie 2 als Wert erhalten, laufen Sie wahrscheinlich auf einer 16-Bit-Codierungsplattform (oder haben möglicherweise einen Codierungsfehler).

Könnten Sie den Code, den Sie verwenden, und einige weitere Informationen über Ihre Umgebung / Ihr Betriebssystem posten?

11voto

John Bode Punkte 112486

Gemäß der Online C-Standard (n1256 Entwurf) :

6.2.5 Arten
...
27 Ein Zeiger auf void muss die gleichen Darstellungs- und Ausrichtungsanforderungen erfüllen wie ein Zeiger auf einen Zeichentyp. 39) Ebenso müssen Zeiger auf qualifizierte oder unqualifizierte Versionen kompatibler Typen dieselben Darstellungs- und Ausrichtungsanforderungen haben. Alle Zeiger auf Strukturtypen müssen die gleichen Darstellungs- und Ausrichtungsanforderungen wie jeder andere. Alle Zeiger auf Vereinigungstypen müssen dieselben Darstellungs- und die gleichen Anforderungen an Darstellung und Ausrichtung wie alle anderen. Zeiger auf andere Typen müssen nicht die gleichen Repräsentations- oder Ausrichtungsanforderungen zu erfüllen.

Warum void- und char-Zeiger auf Ihrem System eine Größe von 2 haben, liegt vermutlich daran, dass Sie auf einer 16-Bit-Plattform arbeiten.

2voto

Mendelt Punkte 35649

Ein Zeiger speichert eine Speicheradresse, die auf etwas anderes verweist. Die Größe eines Zeigers hängt von Ihrer Plattform ab. Auf einer 32-Bit-Plattform benötigen Sie 32 Bits oder vier Bytes, um eine Speicheradresse zu speichern, so dass sizeof jeden Zeiger 4 zurückgibt.

Wenn sizeof(void*) 2 ist, laufen Sie wahrscheinlich auf einer 16-Bit-Plattform.

1voto

S.C. Madsen Punkte 4786

Wie JaredPar bereits erwähnt hat, ist dies plattformabhängig. Um es anders auszudrücken: Wie viele Bits verwendet die verwendete CPU für die Speicheradressierung? Bei 16bit-Adressen würde man eine Größe von 2 Bytes erhalten. Kompilieren Sie Code für einen 16bit-Mikrocontroller?

-3voto

Greety_Tobin Punkte 1

Die Größe eines Zeigers ist gleich der Größe eines Integers. Sie kann in einem 16-Bit-Compiler 2 Byte, in einem 32-Bit-Compiler 4 Byte und in einem 64-Bit-Compiler 8 Byte betragen.

void *ptr , int *ptr y char *ptr erhalten Sie die gleiche Größe, aber wenn Sie ptr++ springt der entsprechende Zeiger je nach Datentyp. d.h. 1 Position in void y char Fall. Ähnlich 4 Positionen in int Fall.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X