Datentypen in CDer Artikel Datentypen in C beschreibt die Verwendung von Datentypen in der Programmiersprache C. Datentypen sind in C Deklarationen für Speicheradressen oder Variablen, die bestimmen, welche Operatoren und Funktionen auf die Adressen und Variablen angewendet werden können. C bietet grundlegende arithmetische Datentypen zur Speicherung von Ganzzahlen und Gleitkommazahlen sowie die nötige Syntax zur Erstellung von Feldern und Verbundtypen. Etliche Header-Dateien der C-Standard-Bibliothek bieten darüber hinaus Definitionen weiterer Datentypen, die jeweils über bestimmte nützliche Eigenschaften verfügen. Grundlegende arithmetische DatentypenC verfügt über die vier arithmetischen Datentypen Der Verzicht auf festgeschriebene Größen und Wertebereiche, um möglichst viele Architekturen zu unterstützen, wird durch definierte minimale Wertebereiche und die folgende feste Relation abgemildert:
CharacterZum Speichern eines Zeichens verwendet man in C den Datentyp Character, geschrieben als char zeichen = 'A'; /* intern gespeichert wird nicht der Buchstabe „A“ sondern die
* entsprechende Binärzahl, meist anhand der ASCII-Tabelle 0b01000001 */
printf("%d", zeichen); /* gibt 0b01000001 als Dezimalzahl aus, also: „65“ */
printf("%c", zeichen); /* gibt 0b01000001 als ASCII-Zeichen aus, also: „A“ */
Ein Character repräsentiert die kleinste adressierbare Einheit in C, in der Regel acht Bit. Deshalb wird die Größe von Objekten und Typen oft als ganzzahliges Vielfaches eines Characters angegeben. Je nach Compiler kann Zu beachten ist, dass ein Zeichenliteral wie IntegerZum Speichern einer ganzen Zahl verwendet man eine Variable vom Datentyp Integer, geschrieben als char ganzzahl = 1; /* mindestens 8 Bit, also 256 mögliche Werte */
short ganzzahl = 2; /* mindestens 16 Bit, also 65536 mögliche Werte */
int ganzzahl = 3; /* mindestens 16 Bit, also 65536 mögliche Werte */
long ganzzahl = 4; /* mindestens 32 Bit, also 4294967296 mögliche Werte */
long long ganzzahl = 5; /* mindestens 64 Bit, also 18446744073709551616 mögliche Werte */
Die Größe eines Integers ist vom jeweiligen Compiler abhängig, der C-Standard garantiert aber eine minimale Größe von 16 Bit. Die tatsächliche Größe beträgt heutzutage (je nach Prozessorarchitektur und Betriebssystem) meist 32 Bit, oft aber auch schon 64 und manchmal noch 16 Bit. In 16 Bit lassen sich 65536 verschiedene Werte speichern. Um die Verwendung von negativen Zahlen zu ermöglichen, reicht der Wertebereich bei 16 Bit gewöhnlich von -32768 bis 32767. Werden keine negativen Zahlen benötigt, kann der Programmierer mit Die tatsächliche Größe eines Integers ist in der Headerdatei Die C-Standard-Bibliothek ergänzt diese Datentypen über die plattformunabhängige Header-Datei float, double und long doubleGleitkommazahlen werden in einem der drei Datentypen float kommazahl = 0.000001f; /* Genauigkeit ist implementierungsabhängig */
double kommazahl = 0.000000000000002; /* Genauigkeit ist implementierungsabhängig */
long double kommazahl = 0.3l; /* Genauigkeit ist implementierungsabhängig */
Unter Genauigkeit ist hierbei nicht die Anzahl der signifikanten Nachkommastellen zu verstehen – vielmehr schreibt der Standard mit FLT_DIG,DBL_DIG,LDBL_DIG lediglich die Anzahl der (direkt aufeinanderfolgenden) signifikanten Dezimalziffern als Genauigkeitskriterium vor, und hierbei mind. jeweils 6/10/10. Die Lage dieser Ziffernfolge (vor Komma, nach Komma, geteilt über Komma) legt der Standard nicht fest. In den meisten C-Implementierungen entsprechen die Datentypen float und double dem international gültigen Standard für binäre Gleitpunktarithmetiken (IEC 559, im Jahr 1989 aus dem älteren amerikanischen Standard IEEE 754 hervorgegangen). Unter dieser Annahme implementiert float das „einfach lange Format“, double das „doppelt lange Format“. Dabei umfasst ein Die genauen Eigenschaften und Wertebereiche auf der benutzten Architektur können über die Headerdatei Komplexe ZahlenZusätzlich existieren seit C99 noch drei Gleitkomma-Datentypen für komplexe Zahlen, welche aus den drei Gleitkommatypen abgeleitet sind: In einer hosted-Umgebung müssen die boolBis zum C99-Standard gab es keinen Datentyp zum Speichern eines Wahrheitswerts. Erst seit 1999 können Variablen als _Bool a = 23; /* Alle zugewiesenen Werte ungleich 0 werden von einer _Bool-Variablen als 1 gespeichert */
#include <stdbool.h>
bool b = false;
voidDer Datentyp void funktionsname(); /* Deklaration einer Funktion, die keinen Wert zurückgibt */
void* zeigername; /* Zeiger auf ein Objekt von beliebigem Typ */
DatenmodellDie C-Sprachnorm legt die Größe (und damit den Wertebereich) der einzelnen Basisdatentypen nicht fest, sondern definiert lediglich Relationen zwischen den Größen der Basisdatentypen und fordert für jeden Basisdatentyp jeweils Mindestgrößen. Daraus ergeben sich in der Praxis mehrere Ausgestaltungsmöglichkeiten, welche man Datenmodell oder auch Programmiermodell nennt. Der Datentyp Auf heutigen Architekturen ist ein
Weblinks |