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.


Log in to reply