sizeof operator
Ermittelt die Größe des Objekts oder Typs.
Wird verwendet, wenn die tatsächliche Größe des Objekts bekannt sein muss.
Inhaltsverzeichnis |
Syntax
sizeof(
Typ
)
|
(1) | ||||||||
sizeof
Ausdruck
|
(2) | ||||||||
Beide Versionen geben einen Wert vom Typ size_t zurück.
Erklärung
Hinweise
Je nach Computerarchitektur kann ein Byte aus 8 oder mehr Bits bestehen, wobei die genaue Anzahl als CHAR_BIT bereitgestellt wird.
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 Bit-Feld Lvalues verwendet werden.
Wenn auf einen Operanden angewendet, der einen Struktur - oder Union -Typ hat, ist das Ergebnis die Gesamtanzahl der Bytes in einem solchen Objekt, einschließlich interner und nachfolgender Auffüllung. Die nachfolgende Auffü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ürde, mit anderen Worten, sizeof ( T ) gibt die Größe eines Elements eines T [ ] -Arrays zurück.
|
Wenn
type
ein
VLA
-Typ ist und die Änderung des Werts seines
Größenausdrucks das Ergebnis von
|
(seit C99) |
Außer wenn der Typ von
expression
ein
VLA
ist,
(seit C99)
expression
wird nicht ausgewertet und der
sizeof
-Operator kann in einem ganzzahligen
konstanten Ausdruck
verwendet werden.
|
Wenn der Typ von expression ein Array variabler Länge ist, wird expression ausgewertet und die Größe des Arrays, zu dem es 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 ] bestimmt werden. Beachten Sie, dass wenn a einen Zeigertyp hat (wie nach Array-zu-Zeiger-Konvertierung oder Anpassung des Funktionsparametertyps), dieser Ausdruck einfach die Anzahl der Bytes im Zeigertyp durch die Anzahl der Bytes im gezeigten Typ teilen würde.
Schlüsselwörter
Beispiel
Die 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
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 (S. 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
Siehe auch
|
C++ Dokumentation
für
sizeof
Operator
|