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

jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

1

09.07.2010, 14:15

Zeiger habe ich verstanden...den Beispielcode aber nicht !?

Hallo an alle,

also ich bein grade im kapitel der zeiger angekommen und trotz dem ganzen rumgerede zeiger sein schwer zu verstehen hab ich bis JETZT noch nichts bemerkt :thumbsup: so weit so gut.

Als ich mit dem Kapitel anfing ging es schon los...ein Code Bsp. wo noch gar keine Zeiger oder Refernzen verwendet werden:

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
57
// C++ für Spieleprogrammierer
// Listing 6.1
// Nachteile ohne Zeiger
//
#include <iostream>

using namespace std;

// Strukturen
//
struct S_Spieler
{
    int Energie;
    int Punkte;
    int xPosition;
    int yPosition;
    char Name[30];
};

// Prototypen
//
S_Spieler NameAbfragen (S_Spieler Spieler); <--------------------

// 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
    Spieler1 = NameAbfragen (Spieler1);   <--------------------------------
    cout << "Neuer Spieler: " << Spieler1.Name << endl;

    return 0;
}

// NameAbfragen
//
// Aufgabe: Name des Spielers abfragen
//
S_Spieler NameAbfragen (S_Spieler Spieler) <---------------------------------------
{
    // Name abfragen
    cout << "Name des Spielers: ";
    cin.get (Spieler.Name, 29);

    return Spieler;
} // NameAbfragen


verstehe ich zwar den Sinn des Programms aber nicht die Zeilen die makiert sind!

ich weis dass das eigentlich schon "drin" sein müsste :S aber ich versteh nicht wieso da verschiedene parameter in ein und der selben funktion verwendet werden können?!?!?

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

09.07.2010, 15:20

Ich verstehe dein Problem leider nicht...

Die erste markierte Zeile ist ein Prototyp,
die zweite ein Aufruf der Funktion
und die dritte die definition der Funktion...

Wenn du den unterschied nicht verstehst, rate ich dir, das Kapitel über Funktionen noch einmal genauer zu lesen ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

09.07.2010, 15:22

wo werden da verschiedene parameter verwendet?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

4

09.07.2010, 15:23

Im Prinzip ganz einfach:

Du deklarierst eine Funktion namens NameAbfragen (Zeile 22)

Die Implementierung/Definition der Funktion beginnt ab Zeile 50.

Die Funktion erwartet einen Parameter/ein Argument vom Typ S_Spieler und gibt Typ S_Spieler zurück.
fka tm

5

09.07.2010, 15:28

Die Funktion NameAbfragen soll vom Spieler eine Eingabe verlangen, die dann in der Struktur S_Spieler gespeichert werden soll.

Ohne Zeiger, wie in diesem Listing, muss nun der Funktion als Parameter die gesamte Struktur S_Spieler übergeben werden. Innerhalb der Funktion wird der Name durch eine Benutzereingabe geändert und dann wird die gesamte Struktur wieder von der Funktion zurückgegeben. Im Programmverlauf wird die bestehende Struktur Spieler1, die anfangs an die Funktion übergeben wurde, nun durch den Rückgabewert ersetzt.

Mit Hilfe von Zeigern kannst du dir das Übergeben der kompletten Struktur an die Funktion und sogar das Zürückgeben der Struktur sparen.

Gruß
SaRu_

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

6

09.07.2010, 15:29

Welche verschiedenen Parameter, ist doch nur ein Parameter. BTW ist der Code ziemlicher Schwachsinn.

7

09.07.2010, 15:30

BTW ist der Code ziemlicher Schwachsinn.
Naja, das soll er ja auch sein, oder nicht?!

C-/C++-Quelltext

1
2
// Listing 6.1
// Nachteile ohne Zeiger

Rac

Frischling

Beiträge: 52

Beruf: Schüler

  • Private Nachricht senden

8

09.07.2010, 16:10

hi,

ich versteh dein problem auch nicht ganz, aber vielleicht liegts daran dass die funktion vom typ
S_Spieler ist. Das liegt daran, dass der rückgabewert auch vom typ S_Spieler ist.
sonst wurde eigentlich schon alles erklärt.

MfG Rac
mfg Rac

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rac« (10.07.2010, 19:01)


jonnesen

Frischling

  • »jonnesen« ist der Autor dieses Themas

Beiträge: 58

Wohnort: Brandenburg, Templin

Beruf: Schüler

  • Private Nachricht senden

9

09.07.2010, 17:59

JaaA also dass S_Spieler vor der Funktion in Zeile 50 steht verstehe ich jetzt :) :)



aber warum steht in Z.40 (S_Spieler Spieler1)

und in zeile 50 und 22 (S_Spieler Spieler)



Gruß Jonas

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

09.07.2010, 18:03

S_Spieler ist der Typ, den Spieler1 hat. Du musst den Typen bekannt machen, damit der Compiler überprüfen kann, dass du auch ja etwas richtiges übergibst. (Prinzipiell der gleiche Grund wie in Zeile 30, wo du auch den Typen angeben musst).

Werbeanzeige