Der Operator »sizeof« in C
Der Operator »sizeof« ergibt die Speichergröße eines Objekts in Speichergrößen eines char-Objekts. Es handelt sich dabei um diejenige Speichergröße, welche sich ergibt, wenn man den Typ des Ausdrucks in einen sizeof-Ausdruck mit einem Typnamen einsetzt.
Dazu wird das Objekt oder der Ausdruck hinter den Operator »sizeof« geschrieben. Klammern sind in diesem Falle nicht notwendig.
- Eine Anwendung des sizeof-Operators
- 〈unary-expression 〉 ::=
- 'sizeof' 〈unary-expression 〉.
Wie schon bei sizeof-Ausdrücken mit einem Typnamen sind auch sizeof-Ausdrücken mit dem sizeof-Operator statische Konstanten und haben den Typ »size_t«.
main.c
#include <stdio.h>
int main( void ){ printf( "%zu\n", sizeof 1 ); }
transcript
4
Das folgende Programm zeigt noch einmal den Typ »size_t«, welches der Typ von sizeof-Ausdrücken ist.
Das folgende Programm zeigt auch, daß ein Name in C schon vor dem Ende seiner Deklaration innerhalb des Initialisierungsausdrucks verwendet werden kann.
main.c
#include <stdio.h>
#include <stddef.h> /* size_t */int main( void )
{ size_t const z = sizeof z;
printf( "%zu\n", z ); }transcript
8
transcript
4
Das folgende Programm zeigt, einige Wert von sizeof-Ausdrücken. Diese Werte hängen aber von der verwendeten C -Implementation ab!
main.c
#include <stdio.h>
int main( void )
{ char const ch = '0';
int const i = 0;
printf( "%zu\n", sizeof ch );
printf( "%zu\n", sizeof &ch );
printf( "%zu\n", sizeof i );
printf( "%zu\n", sizeof '0' ); }transcript
1
8
4
4
Die »8« in der Ausgabe ist ein Indiz für eine 64-Bit-Umgebung, und die letzte »4« deutet im Vergleich mit zwei anderen Ausgaben darauf hin, daß der Typ einer Zeichenkonstanten »'0'« gleich »int« und nicht gleich »char« ist.