Normalmente, los punteros void *
se utilizan para designar un puntero a un tipo de datos desconocido. En este caso, su función devuelve una matriz de punteros así la estrella doble.
En C, un puntero se utiliza a menudo para hacer referencia a una matriz. Por ejemplo, la siguiente asignación es perfectamente legal:
char str1[10];
char *str2 = str1;
Ahora, cuando se utiliza vacío, significa que en lugar de carbón tiene una variable de tipo desconocido.
Los punteros a un tipo de datos desconocido son útiles para escribir algoritmos genéricos. P.ej. la función qsort en la biblioteca estándar de C se define como:
void qsort (void * base,
size_t num,
size_t size,
int (* comparator)
(const void *, const void *));
El algoritmo de ordenación en sí es genérico, pero no tiene conocimiento de los contenidos de los datos. Por lo tanto, el usuario debe proporcionar una implementación de un comparador que pueda manejarlo. El algoritmo llamará al comparador con dos punteros a los elementos que se compararán. Estos punteros son del tipo void *
, porque ahora hay información sobre el tipo de datos que se ordenan.
Tome un vistazo a este hilo para más ejemplos http://forums.fedoraforum.org/showthread.php?t=138213
'void **' = puntero a una '' void * – Mysticial
En este caso, significa "puntero a una matriz de punteros void *" –
@VariableLengthCoder, sin que sería ' void * (* array) [] '.Probablemente signifique "puntero al primer elemento de una matriz de punteros' void' ". –