c / intermediate
Snippet
Rückgabe mehrerer Werte über Pointer
Da C-Funktionen nur einen Wert zurückgeben, werden Pointer als 'Ausgabeparameter' verwendet. Durch Übergabe der Adressen lokaler Variablen kann die Funktion Ergebnisse direkt in den Stack-Frame des Aufrufers schreiben.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>void calculate_stats(int a, int b, int *sum, int *diff) {if (sum) *sum = a + b;if (diff) *diff = a - b;}int main(void) {int s, d;calculate_stats(15, 5, &s, &d);printf("Sum: %d, Difference: %d\n", s, d);return 0;}
Erklärung
1
int *sum
Ein Pointer, der dazu dient, eine Speicheradresse vom Aufrufer zu empfangen.
2
*sum = a + b
Dereferenziert den Pointer, um das Ergebnis in der Variable des Aufrufers zu speichern.