Programmiersprache C/C++

6. Datentypen

6.1. Klassifizierung von Datentypen

Unter einem Datentyp versteht man eine Zusammenfassung von Wertebereichen und Operationen zu einer Einheit.
Anstelle von Datentyp wird mitunter der Begriff Wertart verwendet.

Unterschieden werden kann zwischen

                      Datentypen
                           |
        +------------------+----------------+
        |                                   |
elementare Datentypen              abgeleitete Datentypen
                                            |
           +------------------+-------------+----+------------------+
           |                  |                  |                  |
     eingeschränkte       Zeiger-            aggregierte       abstrakte
       Datentypen        Datentypen          Datentypen        Datentypen
Elementare Datentypen
Elementare Datentypen sind Diese Datentypen sind in den meisten Programmiersprachen - oft in verschiedenen Varianten - vordefiniert.
Alle anderen Datentypen lassen sich aus den elementaren Datentypen ableiten (konstruieren).
Die Werte der elementaren Datentypen
Abgeleitete Datentypen
Mit Hilfe von Konstruktoren kann aus einem oder mehreren Basisdatentypen ein neuer Datentyp abgeleitet werden.
Als Basisdatentyp kommen elementare oder zuvor abgeleitete Datentypen in Frage.
Vordefinierte abgeleitete Datentypen
Diese Datentypen sind nicht in allen Programmiersprachen vordefiniert, Beispiele sind Sind derartige Datentypen vordefiniert, so kann mit ihnen wie mit elementaren Datentypen gearbeitet werden.
In anderen Sprachen müssen diese Datentypen aus den elementaren Datentypen abgeleitet werden, also z.B String aus Char und Complex aus Real.
Eingeschränkte Datentypen
Der Wertebereich eines vorhandenen Basisdatentyps wird eingeschränkt.
Dies kann in folgender Weise geschehen: Als Basisdatentyp kommt meist nur ein elementarer Datentyp wie Integer, Char und Boolean in Frage.
Teilbereichstypen, Aufzählungstypen sowie die elemetaren Datentypen Integer, Char und Boolean bilden die Gruppe der ordinalen Datentypen: ihre Werte sind eineindeutig abbildbar auf Werte vom Typ Integer.
Aggregierte Datentypen (komplexe Datentypen, composite types)
Die Werte aggregierter Datentypen bestehen meist aus verschiedenen Komponenten mit jeweils eigenem Datentyp.
Die Komponenten sind sichtbar, alle entsprechend des Datentyps zulässigen Operationen sind uneingeschränkt auf sie anwendbar.
Abstrakte Datentypen (abstract data types, ADT)
Wie bei aggregierten Datentypen bestehen die Werte meist aus verschiedenen Komponenten mit jeweils eigenem Datentyp.
Der Zugriff auf die Komponenten ist nur über Operationen (Methoden) möglich, die Bestandteil der Datentypdeklaration sind.
Zeiger-Datentypen
Die Werte von Zeiger-Datentypen sind Adressen (von Variablen, Unterprogrammen, usw.).
Zeiger-Datentypen werden durch Programmiersprachen unterschiedlich unterstützt: Variablen eines Zeiger-Datentyps heißen Zeiger (pointer).
Zu unterscheiden ist, durch wen und in welcher Form abgeleitete Datentypen eingeführt werden:
             abgeleitete Datentypen
                        |
     +------------------+----------------+
     |                                   |
  vordefinierte            benutzerdefinierte 
   Datentypen                  Datentypen
                                   |
                          +--------+-------+
                          |                |
                       anonyme          benannte
                      Datentypen       Datentypen
vordefinierten Datentypen (built-in types)
Die Ableitungsvorschrift ist Bestandteil der Sprachdefinition.
Der Umgang mit vordefinierte Datentypen unterscheidet sich syntaktisch häufig nicht von dem Umgang mit skalaren Datentypen.
Vordefinierte Datentypen besitzen einen Namen. Dieser Name gilt entweder als reserviertes Wort oder als vordefiniertes Wort.
Beispiele: int, float, char
benutzerdefinierte Datentypen (user-defined types)
Die Ableitungsvorschrift ist Bestandteil eines Programms.
Der Datentyp wird vom Programmierer als Benutzer der Programmiersprache eingeführt.
anonyme Datentypen (anonymous types)
Die Einführung anonymer Datentypen erfolgt im Zusammenhang mit der Deklaration von Variablen.
Ein anonymer Datentyp wird nicht separat deklariert, die Ableitungsvorschrift ist Bestandteil einer Variablendeklaration.
Wegen des fehlenden Datentypnamens ist eine Bezugnahme zum Zwecke der Nachnutzung des Datentyps nicht möglich.
Beispiel: int x[100];
x ist der Name einer Variablen.
benannte Datentypen (named types)
Die Ableitungsvorschrift wird innerhalb einer Typdeklaration separat notiert, der abgeleitete Datentyp erhält einen Namen.
Der Datentyp kann nachgenutzt werden.
Beispiel: typedef int feld[100];
feld ist der Name eines Datentyps. Durch Programmiersprachen können zur Verfügung gestellt werden: Die Konstruktion von abgeleiteter Datentypen erfolgt unter Rückgriff auf elementare Datentypen bzw. auf bereits zuvor eingeführte abgeleitete Datentypen.

Abstrakte Datentypen sind im allgemeinen benutzerdefiniert. Häufig werden Sprachsystemen vorgefertigte abstrakte Datentypen beigefügt, diese gehören jedoch nicht zur Sprache im engeren Sinne und sind austauschbar und sind damit als benutzerdefiniert einzustufen.

Abgeleitete Datentypen sind, wenn auch in unterschiedlichem Maße, in allen algorithmischen Programmiersprachen möglich. Dabei sind folgende Entwicklungsniveaus zu erkennen, die jeweils aufeinander aufbauen:

Eine weitere Möglichkeit, Datentypen zu klassifizieren, besteht darin, die Struktur ihrer Werte zu untersuchen: Für abgeleitete Datentypen ist eine weitere Unterscheidung möglich: Datentypen lassen sich durch folgende Attribute charakterisieren:

In C stellt sich die Datentyp-Situation wie folgt dar:

                      Datentypen
                           |
        +------------------+----------------+
        |                                   |
elementare Datentypen              abgeleitete Datentypen
   int                                      |
   float                                    |
   void                                     |
                                            |
           +------------------+-------------+----+------------------+
           |                  |                  |                  |
     eingeschränkte       Zeiger-            aggregierte       abstrakte
       Datentypen        Datentypen          Datentypen        Datentypen
         enum              ... *               struct
                                               union
Bemerkungen:
int (ganze Zahlen, Zeichen, Wahrheitswerte) und float (reelle Zahlen) stehen jeweils für eine Familie von Datentypen.
Zur Konstruktion von Arrays (als aggregierte Datentypen) und Zeigern gibt es keine speziellen Schlüsselworte.
Abstrakte Datentypen gibt es nicht.

Zur Datentypfamilie int gehöhren:

  int
  short           short int     signed short int
  long            long int      signed long int
  char                          signed char
  unsigned        unsigned int
  unsigned short                unsigned short int
  unsigned long                 unsigned long int
  unsigned char
Zur Datentypfamilie float gehören:
  float
  double
  long double
Neben vordefinierten Datentypen wird in C vor allem mit benutzerdefinierten anonymen Datentypen gearbeitet.
Bezeichner für benutzerdefinierte Datentypen können mittels typedef eingeführt werden.

Zur Einführung benutzerdefinierter Datentypen gibt es in C im Gegensatz zu Pascal und neueren Datentypen kein einfaches, einheitliches Konzept.
Ferner verwendet C in Bezug auf die Äquivalenz von Datentypen (strukturelle Äquivalenz) ein anderes Konzept als viele andere Sprachen (Namensäquivalenz).


Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 05.03.1996