Esattamente come qualunque altro puntatore, se modifichi la variabile puntatore direttamente non fai che cambiare oggetto a cui la tua variabile-puntatore locale punta. Mi spiego meglio:
codice:
#include <stdio.h>
void Test1(int * Ptr)
{
int mioIntero=20;
Ptr=&mioIntero;
/* ho semplicemente cambiato l'oggetto a cui punta Ptr,
che, essendo di fatto una variabile locale, non influenza la variabile dal main */
printf("%d", *Ptr); /* 20 */
}
void Test2(int * Ptr)
{
*Ptr=30;
/* qui ho effettivamente cambiato il valore nel main, visto che ho modificato
la variabile a cui Ptr punta */
printf("%d", *Ptr); /* 30 */
}
int main(void)
{
int intero=10;
printf("%d\n", intero); /* 10 */
Test1(&intero);
printf("%d\n", intero); /* 10 */
Test2(&intero);
printf("%d\n", intero); /* 30 */
return 0;
}
In sostanza, quindi, se vuoi modificare ciò a cui punta la tua variabile contenuta nel chiamante (che già come tipo di base è un puntatore) la dovrai passare per puntatore, di conseguenza passerai un doppio puntatore a funzione.
codice:
QSpline* qspline(double *x, double *y,int n,double(**eval)(void*,double))
{
/* ... */
}
/* ... */
double (*eval)(void *, double) miaEval;
QSpline * ret;
ret = qspline(&X, &Y, n, &miaEval);