3    Basisdatentypen in C

Ebenso wie Sie nicht ohne Kochtopf kochen können, funktioniert eine Programmiersprache nicht ohne grundlegende Datentypen, mithilfe derer Sie Zahlen in einer Variablen ablegen können. Ebenso wenig würde die Mathematik ohne Variablen funktionieren, von denen die bekannteste wahrscheinlich das x ist. Auf ähnliche Weise funktionieren die Variablen in C: Man kann für Variablen jederzeit den entsprechenden Wert einsetzen. Während Sie allerdings in einen Kochtopf alles Mögliche hineinschneiden können, müssen Sie bei den Basisdatentypen genau auf die »Zutaten« achten. In C sind hierzu von Haus aus Datentypen für Ganzzahlen, Fließkommazahlen und Zeichen vorhanden. Diese sogenannten primitiven Datentypen müssen Sie nicht extra definieren. Denn sie sind dem Compiler von vornherein bekannt und funktionieren, ohne dass Sie zusätzliche Bibliotheken einbinden müssten.

3.1    Variablen

Bevor wir Ihnen Variablen näherbringen, müssen wir ein paar Worte über Speicheradressen verlieren, weil diese in C sehr wichtig sind. Sicherlich wissen Sie, dass Ihr Computer Speicher besitzt, und wahrscheinlich haben Sie schon einmal welchen in Ihren PC eingebaut. Aber wie legt Ihr PC die Daten im Speicher ab, und woher weiß er, wo er diese zuvor abgelegt hat? Die Antwort ist, dass Ihr Prozessor eine interne Schaltung besitzt (den sogenannten Adressbus), die Ihren Speicherbaustein anspricht und die Positionen der einzelnen Zeichen, die in diesem Speicherbaustein stehen, auf Zahlen abbildet. Diese Zahlen, die meist 32 oder 64 Bit groß sind, geben dann z. B. an, dass sich ein bestimmtes Zeichen an der 1.000. Position befindet. Genau diese Positionsangabe ist die Speicheradresse. Da ein Zeichen des Ausführungszeichensatzes, das oft im ASCII-Code codiert ist, ein Byte (also 8 Bits) umfasst, gibt die Speicheradresse die Position des entsprechenden Bytes im Speicher an. Der Prozessor hat nun spezielle Befehle, um diese Bytes aus dem Speicher zu lesen und an einer bestimmten Position in diesem abzulegen. An dieser Position kann z. B. der Inhalt einer Variablen stehen.

Eine Variable ist damit im Grunde genommen nichts anderes, als eine Adresse im Hauptspeicher. Dort legen Sie die Daten ab und greifen später, wenn Sie den Inhalt wieder benötigen, darauf zurück. Auch dies erledigen spezielle Prozessorbefehle und einige interne Speicherstellen, die Register genannt werden. Wie dies im Einzelnen funktioniert, brauchen Sie nicht im Detail zu verstehen. Sie müssen nur wissen, dass alle Variablen eine konkrete Speicheradresse besitzen, die der Compiler zusammen mit dem Namen in einer Variablentabelle ablegt.

Um nun programmtechnisch ohne kryptische Adressangaben und Prozessorbefehle wie MOV EAX,[DS:ESI] auf diese Adressen im Arbeitsspeicher zurückgreifen zu können, benötigen Sie einen eindeutigen Namen. Genau dies ist der Bezeichner. Der Compiler wandelt diesen Namen dann später in eine Adresse um und erzeugt auch die Variablentabelle automatisch. Natürlich belegt jede dieser Variablen einen gewissen Speicherplatz. Wie viel das ist, hängt davon ab, welchen Datentyp Sie verwendet haben, wie viel Platz dieser auf einem bestimmten System beansprucht und mit welchen Werten er implementiert wurde. Der Standard schreibt hier nur eine Mindestgröße für die einzelnen Typen vor.