Каков правильный аргумент для pthread_create

Я видел документацию pthread_create

В приведенном ниже примере они используют:

pthread_create(&tinfo[tnum].thread_id, &attr, &thread_start, &tinfo[tnum]); 

&thread_start – с &

но в других примерах, которые я видел в Интернете, они не использовали & :

 pthread_create(&tinfo[tnum].thread_id, &attr, thread_start, &tinfo[tnum]); 

Я также тестировал и работает без & .

Но каков правильный путь?

    Короткий ответ: оба правильные.


    Подпись pthread_create :

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

    Итак, start_routine – это указатель на функцию, который принимает аргумент void * и возвращает void * .

    Вернемся к вашему вопросу, я полагаю, что thread_start – это имя функции, поэтому &thread_start – это указатель на функцию, который является правильным.

    Тем не менее, thread_start прав, потому что имя функции автоматически преобразуется в указатель функции.