Unterprogramm: Übergabe und Rückgabeparameter

uwefed:
Das übersteigt meinen Horizot.

Referenzen sind kein Hexenwerk, aber wer viel C gemacht hat, wird durch diese C++ Erweiterung erstmal verwirrt, das ging mit auch so. Daher hab ich das bewußt erstmal nicht als Lösung angeboten :slight_smile:
Udo hat aber recht, es ist deutlich eleganter.

Im Prinzip wird aus dem üblichen "Call by Value", bei dem immer die Werte der Parameter auf den Stack gepackt werden wenn eine Funktion aufgerufen wird (default) ein "Call by reference" gemacht. Der Compiler sorgt also dafür das automatisch die Zeiger der Variablen an die Funktion übergeben werden (quasi eine Referenz auf die Werte). Man spart sich dadurch das "verpointern" bei der Übergabe und das ständige dereferenzieren der Pointer beim Rechnen. Das macht den Code übersichtlicher und weniger fehleranfällig. Wenn man statt "*a++" nämlich nur "a++" schreibt, das "a" aber ein Pointer ist, wird der Compiler nicht meckern, trotzdem kommt Murks raus :slight_smile:

void pointer_swap( int* a, int* b) {
 int temp = *b;
 *b = *a;
 *a = temp;
}

int referenz_swap( int &a, int &b) {
 int temp = b;
 b = a;
 a = temp;

}

void setup() {
 Serial.begin(9600);
  
 int a = 1;
 int b = 2;

 Serial.print(a);
 Serial.print(" - ");
 Serial.println(b);
 

 pointer_swap(&a,&b);

 Serial.print(a);
 Serial.print(" - ");
 Serial.println(b);

 referenz_swap(a,b);

 Serial.print(a);
 Serial.print(" - ");
 Serial.println(b);

}

void loop() {
  // put your main code here, to run repeatedly: 
  
}

Beider Funktionen machen das Gleiche, nur ist die Verwendung von referenz_swap() deutlich übersichtlicher weil man a und b direkt verwenden kann.