Einführung in Variablen in C++ im Rahmen der Lehre des Programmierens mit der Programmiersprache C++ (Variable, Variablen), Lektion, Seite 721457
http://www.purl.org/stefan_ram/pub/c++_variablen_de ist die kanonische URI dieser Seite.
Stefan-Ram-Startseite

Variablen in C++ 

Ein bennantes Objekt wird in C++  auch eine Variable  genannt.

Deklarationen

Eine Objektdeklaration  vereinbart einen Bezeichner für ein Objekt.

Dazu muß der Typ des Bezeichners angegeben werden. Die Produktion dafür ist ähnlich wie bei einer Konstantendefinition, nur daß nun das Schlüsselwort "const" entfällt und keine Initialisierung notwendig ist.

simple-declaration 〉 ::=
decl-specifier 〉 {〈decl-specifier 〉} [〈init-declarator 〉 {"," 〈init-declarator 〉}] ";".
decl-specifier 〉 ::=
"bool" | "int" | "double" | "const" | "extern".
init-declarator 〉 ::=
declarator 〉 [〈initializer 〉].

Durch "int v;" wird beispielsweise ein Bezeichner "v" mit dem Typ "int" vereinbart.

Eine Deklaration des Bezeichners "v"
 .---------- <decl-specifier> 
| .------- <init-declarator> 
| | 
--- - 
int v;

Es können mehrere Init-Deklaratoren durch Komma getrennt und einer Kombination von Deklarations-Spezifizierern zugeordnet werden.

Eine Deklaration
 .---------- <decl-specifier> 
| .------- <init-declarator> 
| | .---- <init-declarator> 
| | | 
--- - - 
int v, w;

Die Deklaration "int v, w;" hat die gleichen Folgen, wie die Folge der Deklarationen "int v; int w;".

Da die Verwendung mehrerer Init-Deklaratoren in einer Deklaration manchmal zu Mißverständnissen führen kann, sind im Zweifel mehrere Deklarationen mit nur jeweils einem Init-Deklarator vorzuziehen.

Definitionen

Durch eine Objektdefinition  wird ein Bezeichner vereinbart und  ein passender Speicherbereich bereitgestellt (unter Umständen wird das Objekt auch initialisiert).

Eine Objektdeklaration ist auch eine Objektdefinition, wenn sie nicht den Spezifizierer "extern" enthält oder einen Initialisierer hat.

Die Objektdeklaration "int v;" ist daher auch eine Objektdefinition: Es wird ein int-Objekt bereitgestellt und an den int-Bezeichner "v" gebunden.

Eine Objekt-Definition
 .---------- <decl-specifier> 
| .------- <init-declarator> 
| | 
--- - 
int v;

Initialisierungen

Eine Initialisierung  einer Variablen kann durch den Initialisierer des Init-Deklarators der Variablen geschehen.

Variablendefinition mit Direkt-Initialisierer
    .-------- <declarator> 
| .---- <initializer> 
| | 
- -----  
int v ( 9 );

Variablendefinition mit Kopier-Initialisierer
    .------- <declarator> 
| .---- <initializer> 
| | 
- ---  
int v = 9;

Durch die Initialisierung wird ein Anfangswert  für das Objekt der Variablen festgelegt, der aber später verändert werden kann. Der Kopierinitialisierer "v = 9" hat dieselbe Wirkung wie der direkte Initialisierer "v( int( 9 ))", der Unterschied zwischen Kopierinitialisierung und direkter Initialisierung wird in anderen Lektionen behandelt.

Variablenverwendungen

Der Name einer Variablen steht zunächst für das Objekt  der Variablen. Wird ein Variablenname an einer Stelle verwendet, an der auch ein Literal stehen könnte, so steht der Variablenname für den Wert  des Objektes der Variablen.

Daher ist die Wirkung der Auswertung des Ausdrucks "( ::std::cout << v )" mit einer int-Variablen "v" die Ausgabe einer Darstellung des int-Wertes, der sich in dem int-Objekt "v" befindet. Der Ausdruck "v + 1" ist die Summe dieses Wertes von "v" und "1".

Zuweisungen

Anders als bei Konstanten ist es bei Variablen möglich, ihren Wert während eines programmgesteuerten Vorgangs zu verändern, da der Wert in einem Objekt (Wertspeicher) gehalten wird. Solch einer Veränderung kann in C++  durch eine Zuweisung  erfolgen. Der Ausdruck "v = 8" ist eine Zuweisung des Wertes "8" der rechten Seite des Zuweisungsoperators "=" an das Objekt "v" auf der linken Seite des Zuweisungsoperators. Die vereinfachte Produktion folgt.

assignment-expression 〉 ::=
logical-or-expression 〉 "=" 〈assignment-expression 〉.

Die Wirkung  der Zuweisung ist die Speicherung (das Schreiben) des Werts der rechten Seite assignment-expression  in das Objekt (den Wertspeicher) auf der linken Seite, der durch eine logical-or-expression  bezeichnet wird. Dadurch wird der Wert des Objektes so verändert, daß er ab dem nächsten Sequenzpunkt der Wert der rechten Seite ist (wenn die Typen gleich sind).

Die Anweisungsfolge "v = 3; v = 7; ::std::cout << v;" führt also zur Ausgabe einer Darstellung des Wertes "7", wenn der Bezeichner "v" der Name eines int-Objekts ist. Die Zuweisung "v = 7" überschreibt dabei den vorherigen Wert "3". Wenn dann der Ausgabeoperator "<<" aktiviert wird, hat die Variable "v" den Wert "7".

Eine Kopierinitialisierung, wie in der Deklaration "int v = 8;" wird auch mit einem Gleichheitszeichen geschrieben, ist aber keine  Zuweisung.

Von der Stefan-Ram-Startseite ausgehend finden sich oft noch mehr Informationen zu Themen, die auf einer Seite angesprochen wurden. (Eine Verbindung zur Stefan-Ram-Startseite befindet sich ganz oben auf dieser Seite.)  |   Seiteninformation und Impressum  |   Formular für diese Seite betreffende Mitteilungen an den Herausgeber  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. slrprd, PbclevtugFgrsnaEnz