Namensräume
Varianten
Aktionen

sizeof Operator

Von cppreference.com
< c‎ | Sprache

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

1) Gibt die Größe in Bytes der Objektdarstellung von Typ zurück.
2) Gibt die Größe in Bytes der Objektdarstellung des Typs von Ausdruck zurück. Auf Ausdruck werden keine impliziten Konvertierungen angewendet.

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

(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

sizeof

[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