Warum ist sizeof
leerer Zeiger 2
?
Antworten
Zu viele Anzeigen?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?
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.
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.
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.