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

odc

Frischling

  • »odc« ist der Autor dieses Themas
  • Private Nachricht senden

1

01.09.2006, 12:00

Kapitel 6, Listing 6.6 - verbesserte Version von Listing 6.1

Hallo allerseits,

ich bin ziemlich neu und habe trotz Suche keine Antwort auf meine Frage/mein Problem gefunden. In Listing 6.6 wird ja erstmals ein Zeiger als Übergabeparameter für eine Funktion benutzt. Soweit ist das ja auch sehr elegant und praktisch, allerdings: warum muss der Zeiger nicht vorher initialisiert und deklariert werden?.

Hier die entsprechende Stelle im Listing:

C-/C++-Quelltext

1
2
3
//Prototypen

//

NameAbfragen (S_Spieler *pSpieler); //Frage: Warum muss ich den Zeiger nicht vorher initialisieren?


Des Weiteren hat der Compiler ein wenig rumgemeckert, als ich die Funktion NameAbfragen aufrief. Beim Hinzufügen eines "return 0" hat es tadellos funktioniert. Ist das regelkonform (nach Stroustroup) oder nicht?

Hier die entsprechende Stelle in der Funktion:

C-/C++-Quelltext

1
2
3
    cin.get (pSpieler->Name, 29);

    return 0; //Frage: Stand so nicht im Buch, aber gehört wohl zum Regelwerk von C++


Vielen Dank für jegliche Hilfe! Ich hätte da noch etwa 13 Fragen zur Aufgabenstellung in Kapitel 5, aber das wage ich erst später :)[/i]

Anonymous

unregistriert

2

01.09.2006, 12:27

Du meinst wahrscheinlich

C-/C++-Quelltext

1
int NameAbfragen (S_Spieler *pSpieler);


Also erstmal zum Pointer: Das ist nur ein Parameter, der später durch
einen überwiesenen Wert ersetzt wird. Dieser Wert muss S_Spieler sein
und als Referenz übergeben werden. Das mit dem return 0; liegt daran,
dass der Datentyp der NameAbfragen Funktion int ist, d.h. ein Integer
muss zurückgegeben werden. Würdest du

C-/C++-Quelltext

1
void NameAbfragen (S_Spieler *pSpieler);


schreiben, könntest du dir das return 0; in der Funktion sparen.

Hoffe das beantwortet deine Fragen und hoffe du hast das auch verstanden ;)

EDIT: Achtung: Prototyp und Funktion's Definition müssen identisch sein!

odc

Frischling

  • »odc« ist der Autor dieses Themas
  • Private Nachricht senden

3

01.09.2006, 13:10

Hallo Riddick,

erstmal Danke für Deinen Tipp. Wenn ich Dich recht verstanden habe, übergebe ich eigentlich ja nur eine Referenz auf S_Spieler und keine Variable, also quasi ein Zwischending und muss deshalb keine Definition/Deklaration vornehmen.

Danke für jede Hilfe.

Anonymous

unregistriert

4

01.09.2006, 13:46

Nein, pSpieler ist ja nur ein Parameter, es ist egal, ob das nun ein Pointer
oder sonstwas ist. Nur wenn da ein Pointer ist und du die Funktion aufrufst,
musst du halt eine Referenz einer Variable der Funktion übergeben.
Bei Parameter gibt es keine Definitionen, du kannst höchstens einen
Standard Wert setzen, hier mal ein Beispiel dazu (Sogar mit Prototyp ;) ) :

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
#include <iostream>

// Prototyp

int rechne (int eins, int zwei = 5);

// Main

int main (void)
{
   int ergebnis = 0;

   ergebnis = rechne (3);
   std::cout << ergebnis << std::endl; // Hier ist 8 das Ergebnis


   ergebnis = rechne (2, 7);
   std::cout << ergebnis; // Hier ist 9 das Ergebnis


   cin.get ();
   return 0;
}

// Funktion

int rechne (int eins, int zwei = 5)
{
   return (eins + zwei);
}


Sollte so laufen. Hoffe du hast es jetzt verstanden. ;)

odc

Frischling

  • »odc« ist der Autor dieses Themas
  • Private Nachricht senden

5

01.09.2006, 14:11

Argh, manchmal stehe ich einfach auf dem Schlauch - das Thema wurde ja im Kapitel über Funktionen ausführlichst behandelt... Muss ich wohl nochmal nachlesen, habe es aber dank Deines Beispielcodes gut verstanden.

Vielen Dank für die Unterstützung.

Werbeanzeige