Austauschen zweier Int Werte
-
Hallo,
ich möchte ein Programm schreiben das beim Aufruf zwei Zahlen miteinander vertauscht. Bspw. Zahl1 = 5, Zahl2 = 3. Nach Aufruf der Funktion soll rauskommen: Zahl1 = 3, Zahl2 = 5.
Soweit sollte das eigentlich kein Problem sein, aber aus irgendeinem Grund ändert sich an den Werten gar nichts.Hier der Code:
/* ** ** Austausch von Daten: swap ** Geben Sie eine Funktion swapInt an. swapInt soll bei ** Aufruf zwei ganze Zahlen austauschen. ** */ #include <stdio.h> #include <stdlib.h> int swapInt (int zahl1, int zahl2) { // zahl1 = 5; zahl2 = 3 int temp; temp = zahl1; // temp = 5 zahl1 = zahl2; // zahl1 = 3 zahl2 = temp; // zahl2 = 5 return zahl1, zahl2; } int main() { int zahl1, zahl2; printf("Bitte 2 Zahlen eingeben: \n"); scanf("%d", &zahl1); fflush(stdin); scanf("%d", &zahl2); printf("zahl1 lautet: %d\n zahl2 lautet: %d\n", zahl1, zahl2); printf("zahl1 lautet: %d\n zahl2 lautet: %d\n", swapInt(zahl1, zahl2)); system("pause"); return 0; }
Kann mir jemand weiterhelfen?
Danke schonmal
-
Huhu,
deine Vorgehensweise ist richtig.
Du brauchst einen Zwischenspeicher. Der Tausch sollte funktionieren, wäre da nicht die Sache mit Call by Value.Das ganze müsste so aussehen:
void swapit ( int* z1, int* z2 ) /* Call by Reference bedeutet, dass wir keine lokale Kopie erstellen, sondern mit dem Original arbeiten */ { int temp = *z1; *z1 = *z2; *z2 = temp; }
int swapInt (int zahl1, int zahl2) /* Call by Value, hier werden 2 Kopien der übergebenen Variablen erzeugt. Das heißt: innerhalb der Funktion klappt der Tausch, außerhalb haben die Variablen noch immer den selben Wert! */ { int temp; temp = zahl1; zahl1 = zahl2; zahl2 = temp; return zahl1, zahl2; /* Eine Funktion kann höchstens einen Wert zurückgeben! Nie 2! */ }
Du siehst, das Vorhaben müsste mit Zeigern ablaufen.
Hoffe ich konnte es dir verständlich erklären.
Lies in deinem Buch das Kapitel Funktionen und Zeiger durch. Oder recherchiere nach Call by Reference und Call by Value.
-
Dazu gabs vor kurzem erst diesen Thread
-
Hi,
vielen Dank für die Hilfe, damit hab ich das Problem lösen können. Wär ich nie drauf gekommen
Hab sicherlich schonmal was über call by value und call by reference gehört bzw. gelesen, aber erst durch die praktische Anwendung ist mir klar geworden was es denn tatsächlich bedeutet. Vielen Dank