Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 8 Operatoren
  gp 8.1 Exkurs zu Operatoren
  gp 8.2 Arithmetische Operatoren
    gp 8.2.1 Dividieren von Ganzzahlen
  gp 8.3 Erweiterte Darstellung arithmetischer Operatoren
  gp 8.4 Inkrement- und Dekrement-Operatoren
  gp 8.5 Bit-Operatoren
    gp 8.5.1 Bitweises UND
    gp 8.5.2 Bitweises ODER
    gp 8.5.3 Bitweise XOR
    gp 8.5.4 Bitweises Komplement
    gp 8.5.5 Linksverschiebung
    gp 8.5.6 Rechtsverschiebung
    gp 8.5.7 Rezept für Fortgeschrittene
  gp 8.6 sizeof-Operator
    gp 8.6.1 C versus C++


Galileo Computing - Zum Seitenanfang

8.6 sizeof-Operatodowntop

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;
}

Abbildung
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.



Galileo Computing - Zum Seitenanfang

8.6.1 C versus C+toptop

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'));
 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de