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 ähnlichvielen 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.