¿Por qué start_routine para pthread_create devuelve void * y toma void *

El encabezado de la función parapthread_create Se ve como esto:

int pthread_create(pthread_t * thread, 
                   const pthread_attr_t * attr,
                   void * (*start_routine)(void *), 
                   void *arg);

Lo entiendo todo excepto que el puntero de función parastart_routine es de la formavoid* (*fpointer) (void*) lo que significa que toma en unapuntero nulo y devuelve unpuntero nulo.

El puntero de vacío que toma es solo una forma de pasar un argumento a la start_routine, obtengo esa parte, pero no entiendo por qué la función devuelve un puntero de vacío. ¿Qué código notará ese puntero nulo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta