Der Operator sizeof wird verwendet, um die Größe eines Typs oder Objekts in Bytes zur Kompilezeit zu bestimmen. Er wird häufig zum Zuweisen von Speicher, Berechnen der Größen von Strukturen und Arrays benötigt.
Beispiel:
int a; printf("%zu ", sizeof(a)); // Größe der Variablen a vom Typ int printf("%zu ", sizeof(int)); // Größe des Typs int
Besonderheiten:
sizeof gibt size_t zurück, immer >= 0.sizeof(array) die Größe des gesamten Arrays zurück, nicht die Größe des Zeigers.Beispiel für einen Fallstrick:
void foo(int arr[]) { printf("%zu ", sizeof(arr)); // gibt die Größe des Zeigers aus, nicht des Arrays! } int arr[10]; foo(arr); // sizeof(arr) == 40 (gewöhnlich), sizeof(arr in foo) == 8 (gewöhnlich)
Was gibt der Ausdruck sizeof('a') in der Programmiersprache C zurück?
Antwort: Obwohl 'a' wie ein char aussieht, ist das Ergebnis von sizeof('a') die Größe des Typs int, da eine Zeichenkonstante in C int ist.
Beispiel:
sizeof('a') // gewöhnlich 4, nicht 1
Geschichte
malloc(strlen(str) * sizeof(char)) zugewiesen, wobei das Nullzeichen vergessen wurde. Dies führte zu einem Verlust des letzten Bytes und Fehlern bei der Arbeit mit den Funktionen der Standardbibliothek zur Verarbeitung von Strings.Geschichte
sizeof(arr) in einer Funktion, in der Erwartung, die Größe der gesamten Struktur zu erhalten, erhielt aber nur die Größe des Zeigers. Dies führte dazu, dass zu wenig Daten in den Speicher geschrieben wurden, was zu Heap-Korruption führte.Geschichte
Ein Entwickler entschloss sich, sizeof('a') für die Speicherzuweisung für einen Buchstaben zu verwenden und erwartete 1 Byte, erhielt jedoch 4 (oder 8) — dies führte zu ineffizientem Speicherverbrauch und Problemen im Code, der auf der erwarteten Größe basierte.