Anfang   zurück   weiter

3. C-Datentypen

Variablen

Für die Verarbeitung von Informationen in einem Programm müssen im Speicher des Rechners Plätze (Variablen) zur Aufnahme dieser Informationen reserviert werden. Bevor diese Variablen benutzt werden können, müssen sie zuerst deklariert werden. Dies geschieht am Anfang einer Funktion vor allen ausführbaren Anweisungen. Die Vereinbarung beschreibt die Eigenschaften von Variablen und besteht aus einer Typangabe und einer Liste von Variablen (Namen), die dann diesen Typ besitzen. z.B.:

  int     a,b;
  float   x,y;
  char    ch;

Hier folgt eine Liste aller elementarer numerischer Variablentypen die in C zur Verfügung stehen:

Type Keyword Bytes Range
character char 1 -128 .. 127
unsigned character unsigned char 1 0 .. 255
integer int 2 -32 768 .. 32 767
short integer short 2 -32 768 .. 32 767
long integer long 4 -2 147 483 648 .. 2 147 483 647
unsigned integer unsigned int 2 0 .. 65 535
unsigned short integer unsigned short 2 0 .. 65 535
unsigned long integer unsigned long 4 0 .. 4 294 967 295
single-precision floating-point (7 Stellen) float 4 1.17E-38 .. 3.4E38
double-precision floating-point (19 Stellen) double 8 2.2E-308 .. 1.8E308

Variablen-namen müssen folgenden Regeln gehorchen:

Tabelle der reservierten Schlüsselworte :
auto const double float int short struct unsigned
break continue else for long signed switch void
case default enum goto register sizeof typedef volatile
char do extern if return static union while

Konstante Variablen
Neben den eigentlichen Variablen, bei denen eine Werteänderung erlaubt ist, können in C auch "Konstante Variable" deklariert werden, die keine Änderung des Wertes mehr erlauben. Die allgemeine Formel sieht so aus:

const typ name = wert;
Beispiele:
const int Apostel = 12;
const double PI = 3.14159265;

Konstanten

Neben Variablen werden im Programm oft auch konstante Werte verwendet. Ein konstanter Wert ist ein feststehender Ausdruck, der nicht geändert werden kann. Konstante werden benutzt um Variablen mit Werten vorzubelegen, oder als Teile von Ausdrücken. Der Ausdruck  2 + 3 besteht z.B. nur aus Konstanten, während in  x + 5 eine Variable (x) und eine Konstante auftritt.
Man unterscheidet :

Ganzzahlkonstanten
wie z.B.:

68    /* signed short int */
-68      /* signed short int */
68U      /* unsigned short int */
68L      /* signed long int */
1234567     /* signed long int */

Fließkommakonstanten
Bei Fließkommakonstanten kann sowohl die Schreibweise ±xxx.xxx als auch ±xxx.xxxE±yyy verwendet werden. Gültige Konstanten sind:

0.00012
123.456
1.0e-12
12.3E23
1.
1E1

Zeichenkonstanten
Zeichenkonstanten werden in Apostrophe gesetzt. Nichtdruckbare Zeiche oder solche, die nicht auf der Tastatur verfügbar sind, werden als Escapesequenzen angegeben.

'a'
'\n'
'\t'
'\x41'
Intern werden Zeichen als int-Werte verwaltet, so daß 'a' und 97 eigentlich dasselbe darstellt:
#include <stdio.h>

int main(void)
{
  printf("%c ist in ASCII:          %d\n", 'a', 'a');
  printf("%c ist wirklich in ASCII: %d\n", 97, 97);
  return 0;
}

Datentypumwandlungen

Datentypen können in C im Gegensatz zu anderen Programmiersprachen ineinander umgewandelt werden. In C werden Typumwandlungen entweder implizit oder durch ein spezielles Konstrukt explizit durchgeführt. In einem gemischten Ausdruck wird implizit eine Typumwandlung so vorgenommen, daß versucht wird auf den größten Typ des Ausdruckes zu konvertieren. Die Typ-Reihenfolge ist dabei:
int < long < unsigned < unsigned long < float < double
Die Regeln für die Umwandlung sind: Wird der Ausdruck einer Variablen zugewiesen muß vielleicht noch eine Konversion vorgenommen werden. Beispiele von Umwandlungen enstprechender Variablen zeigt folgende Aufstellung:
char c; int i; long l; float f; double d; 
c - i           Umwandlung  int 
d = c - i       Umwandlung  int, Zuweisung an double 
l * 2.0 - i     Umwandlung  double 
c = l * 2.0 - i Umwandlung  double, Zuweisung an char
f * d           Umwandlung  double 
l = f * d       Umwandlung  double, Zuweisung an long 
1 + 3.0         Umwandlung  double 
'a' + 1         Umwandlung  int 
i =  i / d      Umwandlung  double, Zuweisung an int 

In einem beliebigen Ausdruck kann man mit einer unären Umwandlungsoperation, einem sogenannten type-cast, die explizite Typumwandlung erzwingen. Bei
( typ-name ) ausdruck
wird der Wert des Ausdrucks unter Benutzung der oben angegebenen Regeln umgewandelt. Im Programm
#include <stdio.h>

int main(void)
{
	int n=1;
	double d;

	d = n / 3;
	printf("%lf\n", d);
	return 0;
}
würde die Ausgabe, obwohl die Zuweisung an eine double Variable erfolgt, Null ergeben. Durch einen entsprechenden type-cast erfolgt die Berechnung so, daß die Ausgabe wie gewünscht 0.33333333 liefert.
#include <stdio.h>

int main(void)
{
	int n=1;
	double d;

	d = (double) n / 3;
	printf("%lf\n", d);
	return 0;
}
Bei der Berechnung des Ausdruckes (double) n / 3 wird, da die Konstante 3 eine Ganzzahlkonstante ist, zusätzlich noch eine implizite Umwandlung ausgeführt.

Welche Operatoren gibt es in C?