8.6 sizeof-Operator
 
Dieser Operator gibt Auskunft über die Größe eines Datentyps in Byte. Der sizeof-Operator wird später noch häufiger zur dynamischen Speicherreservierung verwendet. Zur Erklärung des sizeof-Operators wieder ein Programmbeispiel:
/* sizeof_type.c */
#include <stdio.h>
int main(void) {
printf("char : %d Byte\n" , sizeof(char));
printf("int : %d Bytes\n", sizeof(int));
printf("long : %d Bytes\n", sizeof(long int));
printf("float : %d Bytes\n", sizeof(float));
printf("double : %d Bytes\n", sizeof(double));
printf("66 : %d Bytes\n", sizeof(66));
printf("Hallo : %d Bytes\n", sizeof("Hallo"));
printf("A : %d Bytes\n", sizeof((char)'A'));
printf("34343434 : %d Bytes\n", sizeof(34343434));
return 0;
}
 Hier klicken, um das Bild zu Vergrößern
Abbildung 8.7
Verwendung des sizeof-Operators
Das Programm macht nichts anderes, als Ihnen die Größe, die der Datentyp belegt, in Byte auszugeben. Zum Beispiel: 'A' benötigt ein Byte Speicherplatz, da 'A' vom Typ char ist. Bei sizeof("Hello") sollten Sie sich jetzt noch keine Gedanken darüber machen, warum dieses Wort sechs Byte Speicher benötigt, obwohl es nur aus fünf Zeichen besteht. Das sechste Byte wird für das Stringende-Zeichen verwendet. Hier geht es im Augenblick lediglich um den sizeof-Operator.
Jetzt fällt es sicher nicht mehr schwer, zu verstehen, wie Sie mit dem sizeof-Operator Speicherplatz reservieren können. Sie müssen dazu lediglich abfragen, wie viel Speicherplatz ein Datentyp benötigt und den ermittelten Wert dann einer anderen Variablen (genauer: einem Zeiger) übergeben. Des Weiteren wird der sizeof-Operator zur Portierbarkeit von Programmen auf verschiedenen Systemen verwendet. Wie Sie bereits erfahren haben, gibt es Systeme, auf denen ein int-Wert eine Speichergröße von zwei Byte hat. Auf anderen Systemen beträgt die Größe von int wiederum vier Byte. Als Beispiel folgender Pseudocode:
BRAUCHE_SPEICHER_PLATZ = (Datentyp)sizeof(4);
Der Datentyp BRAUCHE_SPEICHER_PLATZ benötigt hier Speicherplatz der Größe eines int-Werts, hier vier Bytes. Wenn das Programm jetzt beispielsweise auf ein anderes System portiert werden soll, auf dem der Datentyp int eine Größe von zwei Byte hat, dann könnte dies zu Problemen führen. Aus diesem Grund ist es besser, dem Compiler zur Übersetzungszeit diese Aufgabe zu überlassen. Dies geschieht folgendermaßen (Pseudocode):
BRAUCHE_SPEICHER_PLATZ = (Datentyp)sizeof(int);
Somit können Sie sicher sein, dass das Programm auf jedem System läuft und die richtige Menge an Speicherplatz reserviert.
Hinweis Der sizeof-Operator ist keine Funktion, obwohl das oft behauptet wird. Der sizeof-Operator holt sich nur die Größe eines Datentyps während der Compilier-Zeit. Er ist somit tatsächlich ein echter Operator.
|
8.6.1 C versus C++
 
Im Programmbeispiel des sizeof-Operators dürfte Ihnen folgende Zeile aufgefallen sein:
printf("A : %d Bytes\n", sizeof((char)'A'));
Da in C eine Zeichen-Literale vom Typ int ist, musste ich hier den Datentyp char casten. In C++ würde folgende Zeile auch 1 Byte ausgeben:
printf("A : %d Bytes\n", sizeof('A'));
|