Namespaces
Variants

sizeof operator

From cppreference.net

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

1) Gibt die Größe in Bytes der Objektdarstellung von type zurück
2) Gibt die Größe in Bytes der Objektdarstellung des Typs von expression zurück. Es werden keine impliziten Konvertierungen auf expression angewendet.

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 sizeof nicht beeinflussen würde, ist es nicht spezifiziert, ob der Größenausdruck ausgewertet wird oder nicht.

(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

sizeof

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