ich habe ein Beispiel mit Strukturen gebastelt, was auch richtig funktioniert:
Code: Alles auswählen
#include <iostream>
using namespace std;
struct S_Human
{
int alter;
char name[30];
};
S_Human createHuman(S_Human human);
int main()
{
S_Human human1, human2;
//Human initialisieren
human1.alter = 0;
human1.name[0] = '\0';
human2.alter = 0;
human2.name[0] = '\0';
human1 = createHuman(human1);
human2 = createHuman(human2);
cout << "Alter:" << human1.alter << "\tName:" << human1.name << endl;
cout << "Alter:" << human2.alter << "\tName:" << human2.name << endl;
return 0;
}
S_Human createHuman(S_Human human)
{
cout << "Alter:";
cin >> human.alter;
cout << "Name:";
cin >> human.name;
return human;
}
Code: Alles auswählen
human1 = createHuman(human1);
human2 = createHuman(human2);
In der Funktion createHuman() wird bei jedem Aufruf eine andere lokale Instanz der selben Struktur erzeugt, die nur innerhalb dieser Funktion gültig ist und nach dem Funktionsaufruf (wenn der Funktionskörper verlassen wird) sofort wieder zerstört wird. Beim Aufruf holt sich diese Funktion die Werte vom Stack und weist diese Werte der lokalen Instanz human zu. Dann werden die Werte innerhalb der Funktion mittels cin verändert und diese Instanz wird mit neuen Werten als Rückgabewert zurückgegeben. Das heißt, dass diese neue Werte wieder auf den Stack gelegt werden.
Diese neue Werte holen sich meine Instanzen human1 und human2 wieder vom Stack und überschreiben damit ihre alte Werte.
Habe ich diesen Vorgang korrekt verstanden? Etwas wichtiges vergessen?
Vielen Dank!