Out-Parameter in C

Lesezeit: 2 Minuten

Benutzeravatar von user1128265
Benutzer1128265

void swap(int &first, int &second){
    int temp = first;
    first = second;
    second = temp;
}
int a=3,b=2;
swap(a,b);

Der Compiler beschwert sich darüber void swap(int &first, int &second) hat einen Syntaxfehler. Wieso den? Unterstützt C keine Referenzen?

  • XOR-Swaps und dergleichen gehören zum IOCCC, nicht im eigentlichen Code oder als Ratschlag für Anfänger.

    – Matti Virkkunen

    4. Februar 2012 um 21:16 Uhr

C unterstützt keine Referenzübergabe; das ist eine C++-Funktion. Sie müssen stattdessen Zeiger übergeben.

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}

int a=3,b=2;
swap(&a,&b);

Benutzeravatar von Mystical
Mystisch

C unterstützt keine Referenzübergabe. Sie müssen also Zeiger verwenden, um das zu erreichen, was Sie erreichen möchten:

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}


int a=3,b=2;
swap(&a,&b);

Ich tue NICHT empfehle das: Aber ich füge es der Vollständigkeit halber hinzu.

Sie können ein Makro verwenden, wenn Ihre Parameter keine Seiteneffekte haben.

#define swap(a,b){   \
    int _temp = (a); \
    (a) = _b;        \
    (b) = _temp;     \
}

Für Integer-Swap können Sie diese Methode ohne lokale Variable verwenden:

int swap(int* a, int* b)
{
    *a -= *b;  
    *b += *a;  
    *a = *b - *a; 
}

  • Sollte sein void swap(int* a, int* b) um die zu vermeiden warning: control reaches end of non-void function (Überprüfen schadet nie if (*a != *b) vor dem tauschen…)

    – David C. Rankin

    30. Mai 2017 um 5:06 Uhr


  • Bitte, oh bitte, benutze das nicht. Abgesehen davon, dass es einen falschen Rückgabetyp hat und schwerer zu lesen ist als die Art mit einer temporären Variablen, ist es auf fast jeder Architektur langsamer. Das einzige, was eine dritte Variable kostet, ist ein temporäres Register.

    – nmichaels

    15. März 2019 um 16:22 Uhr

1432850cookie-checkOut-Parameter in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy