un puntatore a puntatore è semplicemente un puntatore che quando lo dereferenzi ti riferisci ad un altro puntatore, quindi da trattare come tale e per riferirsi al valore vero e proprio puntato bisogna dereferenziare ancora.
Ecco un piccolo esempio:
codice:
#include <stdio.h>
int main() {
int i, j;
char* test[3] = {"123", "123", "123"};
for(i = 0; i < 3; i++) {
for(j = 0; j < 3; j++) {
printf("%c", *((*(test + i)) + j));
}
}
return 0;
}
*((*(test + i)) + j)
questa parte vuol dire, fai puntare test all'elemento i-esimo, dereferenzialo(con *, quindi da ora in poi ci riferiremo all'altro puntatore), sposta il secondo puntatore al j-esimo elemento.
Quindi se vuoi riferirti al secondo carattere della seconda stringa devi fare: *((*(test + 1)) + 1)
E' ciaro?