Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

16.09.2009, 17:34

Zeiger

Hi,

Ich habe mal eine Frage zu einem Quellcode aus dem Buch den ich net ganz verstehe. Erstmal der Code:

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
55
56
// C++ für Spieleprogrammierer

// Listing 6.6

// Verbesserte Version von Listing 6.1

//

#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);     //Hier


// 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);           //Und hier

    cout << "Neuer Spieler: " << Spieler1.Name << endl;

    return 0;
}

// NameAbfragen

//

// Aufgabe: Name des Spielers abfragen

//

void NameAbfragen (S_Spieler *pSpieler) //und hier

{
    // Name abfragen

    cout << "Name des Spielers: ";
    cin.get (pSpieler->Name, 29);     

} // NameAbfragen



Was ich hierbei nicht verstehe ist, hier wird ja ein Zeiger *pSpieler am anfang beim Prototypen der Funktion deklariert. So dann übergeben wir die Adresse von Spieler1. Und in der Funktion NameAbfragen wird dem Zeiger ja ein Name gegeben. Wie kann dann aber Spieler1 den Namen haben, obwohl es kein Zeiger von Spieler1 gibt?

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

16.09.2009, 17:45

Wenn ich das richtig verstanden habe, ist die Lösung diese Zeile:

C-/C++-Quelltext

1
2
// Name des Spielers abfragen

NameAbfragen (&Spieler1);           //Und hier 


Spieler1 ist eine Variable, die im Speicher liegt.
mit diesem "&" wird die addresse der Speicherstelle, wo Spieler1 liegt
geholt. Und diese Addresse, wird dann dem zeiger pSpieler übergeben.
pSpieler hat jetzt die Addresse der Speicherstelle, an der Spieler1 liegt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

16.09.2009, 17:46

Re: Zeiger

Zitat von »"Jay232"«

Und in der Funktion NameAbfragen wird dem Zeiger ja ein Name gegeben. Wie kann dann aber Spieler1 den Namen haben, obwohl es kein Zeiger von Spieler1 gibt?


Nicht dem Zeiger wird ein Name gegeben sondern dem Objekt worauf der Zeiger zeigt (in dem Fall ist das Spieler1) ;)

4

16.09.2009, 17:47

Achsoooooooo jetzt hab ich des mit den Zeigern kapiert danke ;)

5

16.09.2009, 18:08

Gratulation Jay232, das ging ja fix! :)

Andere brauchen Ewigkeiten um Zeiger zu kapieren.
(wenn Sie's denn kapieren...)
fka tm

6

16.09.2009, 18:15

Zitat von »"TrikkieMikkie"«

Gratulation Jay232, das ging ja fix! :)


Danke :D aber ich musste auch erstmal gucken wenn ich den code zum ersten mal gesehen habe^^

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

16.09.2009, 19:08

Zitat von »"TrikkieMikkie"«

Andere brauchen Ewigkeiten um Zeiger zu kapieren.


Wie recht du hast :)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

16.09.2009, 19:19

Das hier habe ich selbst erst letztens entdeckt:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-39497.html

Sieht auf den ersten Blick eigentlich recht verständlich aus, hab es aber nicht ganz durchgelesen. Vielleicht findest du da ja das einte, oder andere, was du doch noch nicht so recht kennst. ;)

9

17.01.2010, 18:04

In der Version meines Buchs fehlt das void vor der Funktion, dadurch lässt sich die Erklärung etwas falsch verstehen, wenn dort steht "Was ales Erstes auffällt, ist nun der fehlende Rückgabetyp." Man kann meinen, dass das fehlende Void gemeint ist aber ohne void wird der Code nicht ausgeführt.

Dann würde mich noch kurz interessieren wofür ich Spieler1.Name[0] mit '\0' definiere?

10

17.01.2010, 18:36

C++ hat keine nativen String, d.h. man hat ein Array von char's. Wenn man jetzt nur ein char* hat, also einen Zeiger, hat man keine Ahnung, wie lang der String ist. An dem \0 Zeichen erkennen diverse Funktionen, dass der String dort zuende ist.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige