1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

C - Funktion zum Vertauschen von Variablenwerten

Discussion in 'Programmieren' started by ottifant321, Dec 9, 2009.

Thread Status:
Not open for further replies.
  1. Hallo,
    warum funktioniert

    Code:
    void umdrehen(int a[])
    {
    	int t1;
    	int t2;
    
    	t1=a[1];
    	t2=a[2];
    
    	a[1]=a[4];
    	a[2]=a[3];
    	a[3]=t2;
    	a[4]=t1;
    }
    
    aber nicht

    Code:
    void exchange(int x, int y)
    {
    	int t;
    
    	t=x;
    	x=y;
    	y=t;
    
    }
    
    

    Im ersten Fall ist das Array in der zugreifenden Funktion umgedreht, aber im zweiten Fall kann ich so keine Werte vertauschen.

    Wo ist der Fehler ?
     
  2. kazhar

    kazhar Viertel Gigabyte

    die variablen einer funktion werden nach dem aufruf nicht "zurück gegeben". das ist eine einbahnstrasse.

    im 1. fall übergibst du (implitzit) einen zeiger auf ein array. den zeiger selber kannst du nicht verändern und verändert "zurückgeben", aber du kannst sehr wohl den inhalt des speichers verändern, auf den der zeiger zeigt.
     
  3. wie könnte ich denn mit zeigern eine solche "exchange-funktion" implementieren, sodass ich zwei int-variablen vertauschen kann ?
     
  4. kazhar

    kazhar Viertel Gigabyte

    auch auf die gefahr hin anderer leute hausübung zu machen...

    du musst halt nicht die 2 ints selber sondern jeweils einen zeiger auf die variable übergeben. etwa in der art:
    Code:
    #include <stdio.h>
    
    void exchange(int* x, int* y) {
      int t = *x;
      *x = *y;
      *y = t;
    }
    
    
    int main() {
      int x1 = 2;
      int x2 = 3;
    
      printf("x1: &#37;i, x2: %i \n", x1, x2);
      exchange(&x1, &x2);
      printf("x1: %i, x2: %i \n", x1, x2);
    
      return 0;
    }
     
  5. daboom

    daboom Megabyte

    Imo etwas eleganter wäre es noch mit Referenzen also in etwa:

    PHP:
    void exchange(intxinty) {
      
    int t x;
      
    y;
      
    t;
    }

    int main() {
      
    int a 1;
      
    int b 2;

      
    exchange(ab);
    }
    Dann spart man sich die ganzen Dereferenizerungen usw. und erreicht trotzdem dasselbe.
     
  6. RealC++

    RealC++ Kbyte

    Referenzen gibt es in C nicht. Das gibt es nur in C++.
     
Thread Status:
Not open for further replies.

Share This Page