y = x * x;
Nehmen wir an, dass x
und y
zwei aufeinanderfolgende Speicherzellen an den Adressen 123456
und 123457
bezeichnen; beim Ausführen der Anweisungen passiert im Speicher das Folgende:
Vorher |
x = 42; |
y = x * x; |
Adresse |
Inhalt |
123456 |
|
123457 |
|
123458 |
|
|
Adresse |
Inhalt |
123456 |
42 |
123457 |
|
123458 |
|
|
Adresse |
Inhalt |
123456 |
42 |
123457 |
1764 |
123458 |
|
|
Wir sehen – keine große Magie! Variablen sind also lediglich Platzhalter für Adressen im Speicher, die unser Programm besser lesbar machen. Im Gegensatz zur Mathematik ist übrigens auch das folgende in der Programmierung erlaubt:
x = 42;
y = x * x;
x = 43;
y = x + x;
x
bekommt hier nacheinander 2 verschiedene Werte zugewiesen (in der Mathematik ist das natürlich unsinnig – hier liegt der große Unterschied im Verhalten von Variablen zur Informatik), die dann entsprechend für die Berechnung von y
verwendet werden; dadurch spielt natürlich auch die Reihenfolge der Ausführung der Anweisungen eine Rolle. Im Speicher passiert das Folgende:
x = 42; |
y = x * x; |
x = 43; |
y = x + x; |
Addr. |
Inhalt |
123456 |
42 |
123457 |
|
123458 |
|
|
Addr. |
Inhalt |
123456 |
42 |
123457 |
1764 |
123458 |
|
|
Addr. |
Inhalt |
123456 |
43 |
123457 |
1764 |
123458 |
|
|
Addr. |
Inhalt |
123456 |
43 |
123457 |
86 |
123458 |
|
|
Die Programmiersprache C++ bringt es mit sich, dass Variablen vor ihrer Verwendung immer deklariert werden müssen. Deklaration heißt, dass dem Compiler mitgeteilt wird, dass es von nun an eine Variable mit dem deklarierten Namen (dem Variablennamen) gibt; zusätzlich muss in C++ (im Gegensatz zu einigen anderen Sprachen) auch immer der Wertebereich der Variablen, der sogenannte Typ bzw. Datentyp, spezifiziert werden. Das hat den Vorteil, dass der Compiler gleich prüfen kann, ob man nur gültige Operationen ausführt – eine Zahl mit einer Zeichenkette zu addieren ist schließlich nicht sonderlich sinnvoll. Außerdem kann der Compiler über den Datentyp die passenden Speicheroperationen generieren, da es auf Prozessorebene ein Unterschied ist, ob man etwa eine natürliche Zahl oder eine reelle Zahl in den Speicher schreiben möchte.
Die Deklaration einer Variablen gestaltet sich in C++ etwa so; hier wird eine Variable x
vom Typ int
– das sind die ganzen Zahlen – deklariert:
int x;
Erst nachdem eine Variable deklariert wurde, kann sie auch benutzt (sprich gelesen und geschrieben) werden; was aber funktioniert, ist die kombinierte Deklaration und erste Zuweisung. Das sieht dann so aus:
int x = 42;
Bei der Zuweisung muss beachtet werden, dass nur Werte passender Typen einander zugewiesen werden, also etwa eine natürliche Zahl an eine Variable vom Typ der natürlichen Zahlen oder eine Zeichenkette an eine Variable vom Typ der Zeichenketten. Passend heißt hier zuweisungskompatibel; natürliche, ganze und reelle Zahlen sind etwa zuweisungskompatibel, natürliche und komplexe Zahlen natürlich nicht. Zu diesem Thema aber später noch etwas mehr. Auf der rechten Seite einer Zuweisung kann dabei ein beliebiger Ausdruck stehen, der ein Ergebnis vom passenden Datentyp liefert; nicht nur konstante Zahlen (etwa 42
) oder simple Berechnungen (x * x
) sind möglich, sondern auch komplexe Ausdrücke und Funktionsaufrufe – dazu gleich etwas.
Noch ein Fakt über Variablen, bevor wir uns ein kurzes Beispiel in konkretem Code ansehen. Jede Variable hat einen sogenannten Gültigkeitsbereich oder Scope. Dieser spezifiziert, in welchen Programmteilen eine Variable “bekannt” ist und damit verwendet werden kann. Für die meisten Variablen gilt, dass sie in dem Scope gültig sind, in welchem sie auch deklariert wurden. Typische Gültigkeitsbereiche sind etwa der globale Scope (das heißt, in der gesamten Datei – man spricht dann von globalen Variablen) oder innerhalb einer Funktion (das wären dann lokale Variablen); auch hier gilt: eine Variable kann in C++ erst benutzt werden, nachdem sie deklariert wurde. In jedem Scope kann auf der gleichen Scope-Ebene jeweils nur eine Variable mit einem bestimmten Namen deklariert werden; zwei globale Variablen x
in der gleichen Datei sind etwa ungültig.
Kommentare (8)