Un pointeur vide est connu sous le nom de pointeur générique. Je voudrais expliquer avec un exemple de scénario pthread.
La fonction thread aura le prototype suivant
void *(*start_routine)(void*)
Les concepteurs de l'API pthread ont pris en compte les arguments et les valeurs de retour de la fonction thread. Si ces choses sont rendues génériques, nous pouvons faire un type cast vers void* tout en envoyant comme argument. De même, la valeur de retour peut être récupérée de void* (mais je n'ai jamais utilisé les valeurs de retour de la fonction thread).
void *PrintHello(void *threadid)
{
long tid;
// ***Arg sent in main is retrieved ***
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
//*** t will be type cast to void* and send as argument.
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
/* Last thing that main() should do */
pthread_exit(NULL);
}