kann mir bitte jemand bei einer referenz aufgabe helfen?



  • mitlerweile könnte ich meinen schädel an der tastaturzerschmettern, bin völlig verwirrt.

    es gibt eine Übungsaufgabe:

    Schreiben Sie eine Funktion maximum, die zwei Adressen von int-Variablen übergeben bekommt und die Variable mit dem größten Wert als Referenz zurückliefert.

    Ich weis schon gar nicht mehr was man in solch einem Fall überhaupt machen soll,
    soll man jetzt der Funktion maximum die Adressen der Originalvariablen übergeben?

    z.B. Fall1:

    int main ()
    {
         int x, y;
         cin >> x >> y;
         cout << maximum (&x,&y) << endl;
    }
    

    oder sollte man zuerst Zeiger erstellen, über die man dann die Adresse der Variablen an die Funktion übergibt? z.B: Fall2:

    int main ()
    {
        int x, y;
        cin >> x >> y;
        int *a=&x, *b=&y;
        cout << maximum (a,b) << endl;
    }
    

    und was ist mit der maximum Funktion selbst? (Fall1:)

    int & maximum (int *a, int *b)
    {
         if (a>b)
            return (a);
         else 
            return (b);
    }
    

    (Fall2:)

    int & maximum (int *a, int *b)
    {
         if (*a>*b)
            return (a);
         else 
            return (b);
    }
    

    und dann kommt natürlich egal wo und wie ich die * und & operatoren drehe und wende lauter fehlermeldungen raus

    bitte echt um hilfe, auch wenn das absolutes anfängerniveau ist und es wohl kaum für jemanden wert ist, die zeit zu beanspruchen *schnief*



  • Dein Fall 2 ist schon gar nicht schlecht. Es fehlt nur eine Kleinigkeit bei den beiden Returnwerten...

    ladyamen schrieb:

    (Fall2:)

    int & maximum (int *a, int *b)
    {
         if (*a>*b)
            return (a); //Hier fehlt noch was...
         else 
            return (b); //...und hier auch.
    }
    


  • ok, hab den Dereferenzierungsoperator * hingemacht und nun läuft das Programm bei Fall 2, thx

    aber was ist mit Fall 1 ?



  • ladyamen schrieb:

    ok, hab den Dereferenzierungsoperator * hingemacht und nun läuft das Programm bei Fall 2, thx

    aber was ist mit Fall 1 ?

    Da vergleichst Du Zeiger (also Speicheradressen) miteinander und versuchst auch, Zeiger zurückzugeben. Der Rückgabetyp Deiner Funktion ist aber int&, und nicht int*.



  • ladyamen schrieb:

    Ich weis schon gar nicht mehr was man in solch einem Fall überhaupt machen soll, soll man jetzt der Funktion maximum die Adressen der Originalvariablen übergeben?

    Da hier nichts in der Aufgabenstellung steht, sehe ich hier die eigene Freiheit (und als Schreibfauler Mensch, würde ich den Adressoperator nutzen ohne Variablen die ich sonst nicht mehr brauche deklarieren zu müssen).

    ladyamen schrieb:

    und was ist mit der maximum Funktion selbst? (Fall1:)

    Mit Sicherheit sollen die Int-Werte verglichen werden, nicht die Zeiger. Daher ist Fall 1 sicherlich falsch. Und nun kommt das nächste Thema: Ist der Aufgabensteller völlig-C-Geschädigt (Wovon ich wegen der Zeigerübergabe schon fast ausgehe) und versteht er nun Zeiger unter dem Begriff Referenz, oder meint er Tatsächlich Referenz im C++ Jargon.

    Im letzten Fall wird eine Rückgabe des Zeigers auch nichts helfen (*a statt a).

    Ich will dir jetzt nicht die Aufgabe gänzlich abnehmen, aber ich hoffe das ich genügend Hinweise gestreut habe (Achte darauf wann etwas ein Zeiger und wann ein Wert ist).

    int a;        // Int-Wert
    int * b = &a; // Int-Zeiger
    int & c = a;  // Referenz auf Int-Wert
    int & d = *b; // Referenz auf Int-Wert (nicht auf den Zeiger!)
    int*& e = b;  // Zur Vollständigkeit: Referenz auf einen Int-Zeiger (für diesen Fall irrelevant).
    

    cu André



  • ich danke euch alles soo sehr für die hilfe, ich weis gar nicht was ich ohne diesen forum hier machen würde 😕

    habe bei Fall1 nun auch den dereferenzierungsoperator bei return probiert und da gibt er immer die zahl aus die man als erstes eingegeben hat,
    deswegen wird mir auch nun klar (dank eurer tipps) was maximum bei fall 1 vergleicht
    so legt wohl der compiler die speicheradressen von der größten herunter zu der niedrigsten an, oder so ähnlich

    vielen dank *verbeug*



  • Der Compiler legt lokale Variablen (meist) in der Reihenfolge auf den Stack in der sie deklariert wurden. Würdest du aus int x, y; einfach int y, x; machen, wäre es anders herum.


Anmelden zum Antworten