Zum Inhalt springen
Topos Uranos

Zusammenfassung

Ein imperatives Programm berechnet sein Ergebnis nicht auf einmal: Es baut es schrittweise auf, indem es Zwischenwerte speichert und verändert. Diese Lektion untersucht den Ort, an dem sie gespeichert werden, die Variable, eine Speicherzelle mit einem Namen, einem Typ und einem Wert. Sie lehrt, wie man sie deklariert und mit geschweiften Klammern initialisiert und warum die geschweiften Klammern die bevorzugte Form sind; wie man ihren Wert durch Zuweisung ändert, deren Zeichen = nicht bedeutet, was es in der Mathematik bedeutet; wie man den Zustand eines Programms, das heißt den Wert aller seiner Variablen in jedem Augenblick, mit einer Ablauftabelle verfolgt; wie man Namen wählt, die sagen, was die Variable speichert; und wie man den lautlosesten Fehler dieser Etappe vermeidet: eine Variable zu lesen, der nie ein Wert gegeben wurde, was in C++ undefiniertes Verhalten ist.

Lernziele

  1. Variablen deklarieren und mit geschweiften Klammern initialisieren und in einem gegebenen Programm die Initialisierung von der Zuweisung unterscheiden.
  2. Den Zustand eines Programms aus aufeinanderfolgenden Zuweisungen mit einer Ablauftabelle von Hand nachvollziehen und so seine Ausgabe vorhersagen.
  3. Englische Namen wählen, die sagen, was jede Variable speichert, nach den Regeln der Sprache und der Richtlinie des Kurses.
  4. Erklären, warum das Lesen einer nicht initialisierten Variablen undefiniertes Verhalten ist, es in einem Programm erkennen und ihm durch stetes Initialisieren vorbeugen.

Die Variable als Speicherzelle

In der Lektion Vom Problem zum Algorithmus wurden die Algorithmen mit Buchstaben wie qq und rr geschrieben, die einen Wert und danach einen anderen annahmen: „rr erhält den Wert r−br - b“. In der Mathematik bezeichnet ein Buchstabe einen festen, wenn auch unbekannten Wert; in einem Algorithmus dagegen bezeichnet er einen Ort, dessen Inhalt sich ändert. Ein C++-Programm braucht dasselbe und erhält es vom Speicher des Computers.

Der Hauptspeicher ist eine lange Folge von Bytes, jedes mit seiner Ordnungsnummer, seiner Adresse. Eine Variable ist ein Stück dieses Speichers, dem das Programm einen Namen und einen Typ gibt. Sie hat also vier Merkmale:

  1. einen Namen, mit dem das Programm sie bezeichnet (count, price);
  2. einen Typ, der festlegt, welche Werte sie speichern kann, wie viele Bytes sie belegt und welche Operationen sie zulässt: int speichert ganze Zahlen, double Zahlen mit Nachkommastellen;
  3. einen Wert, den sie in einem gegebenen Augenblick speichert und der sich ändern kann, während das Programm ausgeführt wird;
  4. einen Ort im Speicher, den der Compiler und das System wählen und den das Programm fast nie zu kennen braucht.

Das Bild, das man sich merken sollte, ist das einer Zelle: der Name oben geschrieben, der Wert darin. Der Typ ist die Größe und die Form der Zelle; eine int-Zelle nimmt kein 2.5 auf, so wie ein Briefschlitz kein Paket aufnimmt. Die Abbildungen dieser Lektion zeichnen den Zustand eines Programms auf diese Weise und zeichnen ihn nach jeder Anweisung neu.

Dass der Typ die Größe festlegt, lässt sich sehen: Der Operator sizeof liefert die Zahl der Bytes, die eine Variable oder ein Typ belegt.

C++-Programm
#include <print>​int main(){    const int count{12};    const double price{4.5};    std::println("count belegt {} Bytes", sizeof(count));    std::println("price belegt {} Bytes", sizeof(price));}
Ausgabe
count belegt 4 Bytesprice belegt 8 Bytes

Ein int belegt hier 4 Bytes und ein double 8. Diese Zahlen sind nicht auf allen Systemen dieselben, und von ihnen hängt ab, wie viele verschiedene Werte in jeden Typ passen; die Lektionen Ganze Zahlen und ihre Darstellung und Gleitkommazahlen werden es untersuchen. Hier genügt das Wesentliche: Der Typ einer Variablen wird bei ihrer Deklaration festgelegt und ändert sich nie; was sich ändert, ist ihr Wert.