c / intermediate
Snippet
Zeiger-Modifikation über doppelte Indirektion
Um die Adresse zu ändern, auf die ein Zeiger im Bereich des Aufrufers zeigt, müssen Sie einen Zeiger auf diesen Zeiger übergeben (doppelte Indirektion). Dies ermöglicht es Funktionen, externe Zeiger zu aktualisieren, z. B. bei der Neuzuweisung von Speicher.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>void reallocate_buffer(int **ptr, int new_size) {*ptr = realloc(*ptr, new_size * sizeof(int));}int main() {int *buf = malloc(5 * sizeof(int));reallocate_buffer(&buf, 10);free(buf);return 0;}
Erklärung
1
int **ptr
Parameter, der einen Zeiger auf einen Integer-Zeiger darstellt.
2
*ptr = realloc(...);
Dereferenziert den Doppelzeiger einmal, um die Adresse des ursprünglichen Zeigers zu aktualisieren.