Ist das denn so jetzt richtig:
Eine Variable, die in einer Funktion geschrieben wurde wurde in der Funktion InitialisiereTestVariable, in der die Variable "Test" geschrieben wurde, ein Wert zugewiesen. Dieser Wert ist privat deklariert und mit Rückgabewert kann ich die Variable für andere Funktionen zugänglich machen. Stimmt so oder???
Nein.
Wenn du eine Variable innerhalb des Gültigkeitsbereiches einer Funktion (also zwischen den geschweiften Klammern { } ) und ohne "static" definierst, dann wird diese Variable wieder gelöscht, sobald der Gültigkeitsbereich der Funktion verlassen wurde (also nach dem return). Wenn du sowas wie "return eine_variable;" schreibst, dann wird der
Wert dieser Variable
kopiert. Bei jedem erneuten Aufruf dieser Funktion wird die Variable neu erstellt und initialisiert.
Also:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
int EineFunktion()
{
int a; // a wird deklariert und definiert (der Wert ist undefiniert)
a = 5; // jetzt ist a 5
return a; // der Wert von a wird für den Aufrufer kopiert
}
int main()
{
/* Die Funktion wird aufgerufen, der Rückgabewert wird nicht gespeichert, geht also nach dem Funktionsaufruf verloren. (genauer: er wird in einer temporären Variable gespeichert, so kann man Rückgabewerte
von Funktionen direkt einer anderen Funktion als Parameter übergeben.*/
EineFunktion();
// v ist danach 5 (weil "EineFunktion" 5 (den Wert von a) zurückliefert)
int v = EineFunktion();
// verändert den Wert von v, dies beeinflusst natürlich NICHT den Wert vom a in der Funktion "EineFunktion" da v nur eine Kopie davon ist
v = 20;
}
|
Bei diesem Code wird a 2 mal erstellt (bei jedem Funktionsaufruf), ebenso wird a 2 mal der Wert 5 zugewiesen. a wird auch 2 mal, nämlich bei jedem return, kopiert (einmal in eine temporäre Variable und einmal in die Variable v)
Anders sieht es aus, wenn du vor das "int a;" ein "static" schreibst, dann wird a nämlich nur einmal (beim ersten Funktionsaufruf) erstellt, aber trotzdem wird 2 mal der Wert 5 zugewiesen und 2 mal a kopiert.
Du hast scheinbar ein paar Probleme mit Begriffen wie deklarieren, definieren und initialisieren, deshalb hier eine kurze Zusammenfassung dazu:
|
C-/C++-Quelltext
|
1
2
3
4
|
int a = 5; // a wird deklariert (mittgeteilt das es a gibt), definiert (mit zugehörigem Speicherbereich "verknüpft") und mit dem Wert 5 initialisiert
int b; // b wird deklariert und definiert (und mit einem undefinierten, compilerabhängigen Wert initialisiert)
extern int c; // c wird nur deklariert und muss (durch "int c;") definiert werden, um verwendet werden zu können
int d = a; // d wird deklariert, definiert und mit dem Wert von a (hier: 5) initialisiert. Änderungen an d beeinflussen natürlich NICHT a und umgekehrt
|
Und statt "privat" hast du wohl eher lokal gemeint... (als Gegenteil von global)
Hab versucht das so vereinfacht wie möglich zu erklären
Ich hoffe ich hab dich nicht allzusehr verwirrt und konnte dir wenigstens ein bischen helfen
Mit ein wenig Zeit, viel Erfahrung und den richtigen Büchern wirst du das schon noch irgendwann vollständig verstehen. Lass dich dadurch nicht zu sehr verwirren, finde dich lieber mit Halbwissen ab und baue das dann später aus. (aber vergiss nicht das "später ausbauen"
)