sizeof Operator
Ermittelt die Größe des Objekts oder Typs.
Wird verwendet, wenn die tatsächliche Größe des Objekts bekannt sein muss.
Inhalt |
[bearbeiten] Syntax
sizeof( Typ ) |
(1) | ||||||||
sizeof Ausdruck |
(2) | ||||||||
Beide Versionen geben einen Wert vom Typ size_t zurück.
[bearbeiten] Erklärung
[bearbeiten] Hinweise
Je nach Computerarchitektur kann ein Byte aus 8 oder mehr Bits bestehen, wobei die genaue Anzahl als CHAR_BIT angegeben ist.
sizeof(char), sizeof(signed char) und sizeof(unsigned char) geben immer 1 zurück.
sizeof kann nicht mit Funktionstypen, unvollständigen Typen (einschließlich void) oder Bitfeld-Lvalues verwendet werden.
Wenn der Operand vom Typ Struktur oder Union ist, ist das Ergebnis die Gesamtzahl der Bytes eines solchen Objekts, einschließlich interner und nachfolgender Füllung. Die nachfolgende Füllung ist so beschaffen, dass, wenn das Objekt ein Element eines Arrays wäre, die Ausrichtungsanforderung des nächsten Elements dieses Arrays erfüllt wäre; anders ausgedrückt, sizeof(T) gibt die Größe eines Elements eines T[]-Arrays zurück.
|
Wenn Typ ein VLA-Typ ist und die Änderung des Werts seines Größen-Ausdrucks das Ergebnis von |
(seit C99) |
Es sei denn, der Typ von Ausdruck ist ein VLA,(seit C99)Ausdruck wird nicht ausgewertet und der sizeof-Operator kann in einem ganzzahligen Konstanten-Ausdruck verwendet werden.
|
Wenn der Typ von Ausdruck ein Variable-Length Array-Typ ist, wird Ausdruck ausgewertet und die Größe des Arrays, zu dem er ausgewertet wird, zur Laufzeit berechnet. |
(seit C99) |
Die Anzahl der Elemente in jedem Array a einschließlich VLA(seit C99) kann mit dem Ausdruck sizeof a / sizeof a[0] ermittelt werden. Beachten Sie, dass, wenn a einen Zeigertyp hat (z. B. nach der Array-zu-Zeiger-Konvertierung von Funktionsparameter-Typanpassungen), dieser Ausdruck einfach die Anzahl der Bytes eines Zeigertyps durch die Anzahl der Bytes des zeigenden Typs teilt.
[bearbeiten] Schlüsselwörter
[bearbeiten] Beispiel
Beispielausgabe entspricht einer Plattform mit 64-Bit-Zeigern und 32-Bit-int
#include <stdio.h> int main(void) { short x; // type argument: printf("sizeof(float) = %zu\n", sizeof(float)); printf("sizeof(void(*)(void)) = %zu\n", sizeof(void(*)(void))); printf("sizeof(char[10]) = %zu\n", sizeof(char[10])); // printf("sizeof(void(void)) = %zu\n", sizeof(void(void))); // Error: function type // printf("sizeof(char[]) = %zu\n", sizeof(char[])); // Error: incomplete type // expression argument: printf("sizeof 'a' = %zu\n", sizeof 'a'); // type of 'a' is int // printf("sizeof main = %zu\n", sizeof main); // Error: Function type printf("sizeof &main = %zu\n", sizeof &main); printf("sizeof \"hello\" = %zu\n", sizeof "hello"); // type is char[6] printf("sizeof x = %zu\n", sizeof x); // type of x is short printf("sizeof (x+1) = %zu\n", sizeof(x + 1)); // type of x+1 is int }
Mögliche Ausgabe
sizeof(float) = 4 sizeof(void(*)(void)) = 8 sizeof(char[10]) = 10 sizeof 'a' = 4 sizeof &main = 8 sizeof "hello" = 6 sizeof x = 2 sizeof (x+1) = 4
[bearbeiten] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 6.5.3.4 Die sizeof und alignof Operatoren (S. TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 6.5.3.4 Die sizeof und _Alignof Operatoren (S. TBD)
- C11-Standard (ISO/IEC 9899:2011)
- 6.5.3.4 The sizeof and _Alignof operators (p: 90-91)
- C99-Standard (ISO/IEC 9899:1999)
- 6.5.3.4 Der sizeof Operator (S. 80-81)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 3.3.3.4 Der sizeof Operator
[bearbeiten] Siehe auch
| C++ Dokumentation für
sizeof Operator |