Normalmente i puntatori void *
indicano un puntatore a un tipo di dati sconosciuto. In questo caso la tua funzione restituisce una matrice di tali puntatori, quindi la doppia stella.
In C, un puntatore viene spesso utilizzato per fare riferimento a un array. Ad esempio, la seguente assegnazione è perfettamente legale:
char str1[10];
char *str2 = str1;
Ora, quando si utilizza vuoto, significa che invece di char si dispone di una variabile di tipo sconosciuto.
I puntatori a un tipo di dati sconosciuto sono utili per scrivere algoritmi generici. Per esempio. la funzione qsort nella libreria standard C è definito come:
void qsort (void * base,
size_t num,
size_t size,
int (* comparator)
(const void *, const void *));
L'algoritmo di ordinamento stessa è generico, ma non ha alcuna conoscenza del contenuto dei dati. Pertanto, l'utente deve fornire un'implementazione di un comparatore in grado di gestirlo. L'algoritmo chiamerà il comparatore con due indicatori per gli elementi da confrontare. Questi puntatori sono di tipo void *
, poiché ora sono disponibili informazioni sul tipo di dati che vengono ordinati.
Date un'occhiata a questo thread per ulteriori esempi http://forums.fedoraforum.org/showthread.php?t=138213
'' vuoto ** = puntatore a una '' void * – Mysticial
In questo caso, significa "puntatore a un array di puntatori void *" –
@VariableLengthCoder, senza che sarebbe ' void * (* array) [] '.Probabilmente vuoi dire "puntatore al primo elemento di una matrice di puntatori" void "". –