Hallo, ich habe ein Problem mit Zeigern.
Ein einfaches Programm, was ich verstehe:
Beispiel1
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
// C++
//
#include <iostream>
using namespace std;
void Rechne (int *pPunkte, int Bonus);
// Hauptprogramm
//
int main ()
{
// Variablen
//
int Punkte = 500;
int Bonus = 300;
Rechne (&Punkte, Bonus);
cout << "Punkte: " << Punkte << endl;
}
void Rechne (int *pPunkte, int Bonus)
{
*pPunkte += Bonus;
}
|
Nun zu meinem Programm was ich nicht ganz verstehe.
Beispiel2
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
// C++
// Listing
//
#include <iostream>
using namespace std;
// Strukturen
//
struct S_Spieler
{
int Energie;
int Punkte;
int xPosition;
int yPosition;
char Name[30];
};
// Prototypen
//
void NameAbfragen (S_Spieler *pSpieler);
// Hauptprogramm
//
int main ()
{
// Variablen
//
S_Spieler Spieler1;
// Spieler initialisieren
Spieler1.Energie = 1000;
Spieler1.Punkte = 0;
Spieler1.xPosition = 0;
Spieler1.yPosition = 0;
Spieler1.Name[0] = '\0';
// Name des Spielers abfragen
NameAbfragen (&Spieler1);
cout << "Neuer Spieler: " << Spieler1.Name << endl;
return 0;
}
// NameAbfragen
//
// Aufgabe: Name des Spielers abfragen
//
void NameAbfragen (S_Spieler *pSpieler)
{
// Name abfragen
cout << "Name des Spielers: ";
cin.get (pSpieler->Name, 29);
} // NameAbfragen
|
Bei dem 2. Programm, wird eine Instanz "Spieler1" von der Struktur erstellt, soweit klar. Dann wird die Adresse der Struktur Spieler an eine Funktion übergeben, soweit auch klar. Was ich aber auf Teufel komm raus nicht verstehe ist: In der Funktion "NameAbfragen" wird etwas in pSpieler->Name geschrieben, jedoch ist pSpieler niegends deklariert, in meinem ersten beispiel heißt es ja auch *pPunkte warum heißt es also nicht *pSpieler?
Ich interpretiere das so:
Im Beispiel1 wir die lokale Variable Punkte direkt in der Funktion über die Adresse überschrieben.
Im Beispiel2 legt die Funktion was in den Stack, <last in first out> somit ist Spieler1.name "pSpieler" da das, dass letzte ist was in den Stack gekommen ist. Jedoch vermisse ich dennoch ein * da pSpieler nirgends deklariet ist. Wenn ich aber im Beispiel1 bei *pPunkte den stern weg nehme geibts einen error.
Ich weiß einfach nicht wo ich einen totalen Denkfehler habe.