Code Problem!



  • Hallo,
    Erstmal Sry für den dummen Titel aber ich weiß einfach net was ich sonst schreiben soll. In meinem Lernbuch ist im Kapitel Zeiger vollgender Code:

    #include <iostream>
    
    using namespace std;
    
    // Prototypen
    //
    void BerechnePunkte (int *pPunkte, int Bonus);
    
    // Hauptprogramm
    //
    int main ()
    {
    	// Variablen
    	//
    	int Punkte = 500;
    	int Bonus = 150;
    
    	// Punkte vor Funktionsaufruf ausgeben
    	cout << "Punkte vor dem Funktionsaufruf: ";
    	cout << Punkte << endl;
    
    	// Es wird die Funktion "BerechnePunkte" aufgerufen,
    	// der als Parameter die ADRESSE der Variablen
    	// "Punkte" übergeben wird sowie der Wert der
    	// Variablen "Bonus"
    	//
    	BerechnePunkte (&Punkte, Bonus);
    
    	// Punkte nach dem Funktionsaufruf ausgeben
    	cout << "Punkte nach dem Funktionsaufruf: ";
    	cout << Punkte << endl;
    
    	return 0;
    }
    
    // BerechnePunkte
    //
    // Aufgabe: Bonus zu den Punkten hinzuzählen
    //
    void BerechnePunkte (int *pPunkte, int Bonus)
    {
    	// Mittels Indirektion die Variable "Punkte" ändern,
    	// deren Adresse als Funktionsparameter übergeben wurde
    	//
    	*pPunkte += Bonus;
    
    } // BerechnePunkte
    

    ´Hier wird ja der Zeiger pPunkte benutzt der (anscheinend) die Adresse von Punkte hat. Und genau das kapier ich nicht, den dem Zeiger wird doch garnicht die Adresse von Punkte zugewiesen. Was ich auch nicht kapiere ist, das beim Funktionsaufruf auf einmal nicht mehr der Zeiger, sonder die Adresse von Punkte in den Parametern steht. Muss man nicht eigentlich die Parameter immer gleich lassen? Und wo nimmt der überhaupt auf einmal Punkte her? Punkte wird doch nirgends in der Funktion benutzt.

    Ich weiß sind ziemlich viele Fragen auf einmal. Ich hoffe mir kann da jemand weiterhelfen, denn für mich wiederspricht das allem was ich bis jetzt gelernt habe.

    Mfg Kim

    PS: Achso und der Code klappt natürlich auch, also wenn man Punkte hinterher nochmal aufruft hat sich der Wert erhöht.



  • Ich weiß sind ziemlich viele Fragen auf einmal. Ich hoffe mir kann da jemand weiterhelfen, denn für mich wiederspricht das allem was ich bis jetzt gelernt habe.

    Dann hast du wohl was falsches gelernt. Mal abgesehen davon, daß man in C++ an dieser Stelle eher eine Referenz als einen Zeiger verwendet, ist mit dem Code alles in Ordnung. Also mal im Einzelnen:

    Hier wird ja der Zeiger pPunkte benutzt der (anscheinend) die Adresse von Punkte hat

    Kann man so sagen. Eine Zeiger-Variable verhält sich zu einer Adresse so wie sich z.B. eine int-Variable zu einem int-Wert verhält.

    Und genau das kapier ich nicht, den dem Zeiger wird doch garnicht die Adresse von Punkte zugewiesen.

    Doch. Und zwar hier:

    BerechnePunkte (&Punkte, Bonus);
    

    Was ich auch nicht kapiere ist, das beim Funktionsaufruf auf einmal nicht mehr der Zeiger, sonder die Adresse von Punkte in den Parametern steht.

    Das Ganze noch mal am Beispiel von ints. Was du gerne hättest wäre also:

    int b = 1;
    Funktion (b);
    

    wobei Funktion soetwas ist

    void Funktion (int a)
    {
    
    }
    

    Du kannst aber genausogut schreiben:

    Funktion (1);
    

    Um es noch mal anders zu formulieren: Der Wert der Zeigervariable ist eine Adresse. Klar?

    Punkte wird doch nirgends in der Funktion benutzt.

    Doch. Hier:

    *pPunkte += Bonus;
    


  • Kim 92 schrieb:

    Was ich auch nicht kapiere ist, das beim Funktionsaufruf auf einmal nicht mehr der Zeiger, sonder die Adresse von Punkte in den Parametern steht.

    Das ist dasselbe. Das heißt (in diesem Zusammenhang) ist Zeiger = Adresse. Das sollte Dein C++-Buch aber eigentlich auch vermittelt haben.


Log in to reply