A pointer to a pointer lets a helper update which object another pointer names.

Pointer To Pointer

pointer_to_pointer.c
#include <stdio.h>

static void choose_larger(int **slot, int *left, int *right) {
    if (*right > *left) {
        *slot = right;
    } else {
        *slot = left;
    }
}

int main(void) {
    int left = ;
    int right = 7;
    int *selected = &left;

    choose_larger(&selected, &left, &right);

    printf("selected=%d\n", *selected);
    return 0;
}
#include <stdio.h>

static void choose_larger(int **slot, int *left, int *right) {
    if (*right > *left) {
        *slot = right;
    } else {
        *slot = left;
    }
}

int main(void) {
    int left = ;
    int right = 7;
    int *selected = &left;

    choose_larger(&selected, &left, &right);

    printf("selected=%d\n", *selected);
    return 0;
}
#include <stdio.h>

static void choose_larger(int **slot, int *left, int *right) {
    if (*right > *left) {
        *slot = right;
    } else {
        *slot = left;
    }
}

int main(void) {
    int left = ;
    int right = 7;
    int *selected = &left;

    choose_larger(&selected, &left, &right);

    printf("selected=%d\n", *selected);
    return 0;
}
pointer slot A pointer-to-pointer receives the address of a pointer variable, not the address of the final value.
retargeting Writing through the pointer slot changes the caller's pointer.