Originariamente inviato da pipporossonero
la necessità del triplo puntatore sta nel fatto che io devo allocare una certa quantità di memoria e se faccio funzioni del tipo void alloca(int **,int) significa che dovrò fare una chiamata per valore e non per indirizzo !
Questo è un problema in quanto da ciò che ha spiegato il mio professore (o almeno da ciò che ho capito io e potrei anche aver capito male), se facciamo una chiamata per valore allora la funzione non modificherà i parametri attuali bensì lavorerà solo sui parametri formali quindi una chiamata per valore di tale funzione sarebbe inutile .Per questo penso sia necessaria una chiamata per indirizzo e nella dichiarazione della funzione devo quindi inserire un triplo puntatore.( ho già fatto lo stesso programma con funzioni non void ma che restituiscono un valore e funziona senza intoppi il mio problema rimane questo con funzioni void).
se ho detto assurdità perdonatemi e correggetemi
Tranquillo, se il parametro passato alla funzione è un puntatore il passaggio avverrà solamente per riferimento.

Per esempio:
codice:
void incrementa(int n){
     n++;
}

main() {
int c = 5;
incrementa(c);
}
Questa funzione non ha effetto, perché sto passando per valore.

codice:
void incrementa(int *n){
     (*n)++;
}

main() {
int num = 5;
int *c = & num;
incrementa(c);
}
Questa invece si, perché sto passando il puntatore e quindi è un passaggio per riferimento.
Ma in questo caso stiamo parlando di una variabile.

Il tuo **p è già un puntatore di suo
Quando ci sono i puntatori di mezzo, non hai alcun problema (devi solo stare attento ché i puntatori sono potenti solo se usati bene).