Fehler Swap-Funktion



  • Hi!

    Wo liegt mein Fehler? Ich steh auf dem Schlauch...
    😕

    #include <stdio.h> 
    int i = 0; 
    
    void swap (int* x, int* y) { 
    	int temp; 
    	temp = x; 
    	x = y; 
    	y = temp; 
    	} 
    
     int f() { 
    	i++; 
    	 return i; 
    	} 
    
    int main () { 
    	int feld[4] = {4,3,2,1}; 
    	int zahl1=5, zahl2=3; 
    
    /* 2. Aufgabenteil */ 
    	printf("vor swap: zahl1=%d, zahl2=%d\n", zahl1, zahl2); 
    	swap(&zahl1, &zahl2); 
    	printf("nach swap: zahl1=%d, zahl2=%d\n", zahl1, zahl2); 
    
     getchar();
    	return 0; 
     }
    

  • Mod

    Compilerwarnungen anschalten. Nochmal alle Typen überprüfen. Nochmal angucken, wie Zeiger funktionieren.



  • Ah ok, ich muss noch ein Sternchen hinzufügen.
    Allerdings funktioniert die swap-Funktion irgendwie nicht. Kompilieren ja.



  • Krachi schrieb:

    Ah ok, ich muss noch ein Sternchen hinzufügen.

    Eigentlich vier Sternchen.

    Allerdings funktioniert die swap-Funktion irgendwie nicht. Kompilieren ja.

    Du hast den Satz "Nochmal angucken, wie Zeiger funktionieren." ignoriert.



  • Krachi schrieb:

    Ah ok, ich muss noch ein Sternchen hinzufügen.
    Allerdings funktioniert die swap-Funktion irgendwie nicht. Kompilieren ja.

    Stell dir mal vor, du bist ein erfahrener C Programmierer, der seine Zeit dafür opfert, Anfängern in Foren zu helfen.
    Meistens tust du das gerne, aber manchmal wird es für dich schwierig.
    Eines Tages kommt wieder so eine Situation, wie sie schon häufig vorgekommen ist, leider viel zu häufig.
    Ein Nutzer hat ein Problem, postet aber weder (aktuellen) Code, noch sagt er, was genau passiert.
    Angenervt schreibst du die typische Antwort auf diese Situation: "Meine Kristallkugel ist leider gerade in Reperatur" oder "Ich kann nicht hellsehen".
    Aber insgeheim findest du das schade, denn du würdest dem Nutzer gerne helfen wollen.



  • Entschuldigung, wird nicht wieder vorkommen!

    #include <stdio.h> 
    int i = 0; 
    
    void swap (int* x, int* y) { 
    	int temp; 
    	temp = *x; 
    	*x = *y; 
    	*y = temp; 
    	} 
    
     int f() { 
    	i++; 
    	 return i; 
    	} 
    
    int main () { 
    	int feld[4] = {4,3,2,1}; 
    	int zahl1=5, zahl2=3; 
    
    /* 2. Aufgabenteil */ 
    	printf("vor swap: zahl1=%d, zahl2=%d\n", zahl1, zahl2); 
    	swap(&zahl1, &zahl2); 
    	printf("nach swap: zahl1=%d, zahl2=%d\n", zahl1, zahl2); 
    
     getchar();
    	return 0; 
     }
    

    Hier nun der korrekte Code, den ich mit Hilfe des Compilers korrigiert habe.
    Habe ich das richtig verstanden?
    Die Variablen x und y müssen als Zeiger definiert werden, damit man die Funktion via Call by Reference nutzt und nicht als Call by Value?
    Die Temp-Variable verbleibt als lokale Variable innerhalb der Funktion.



  • Alles richtig.


Anmelden zum Antworten