Особого случая нет - наоборот! Имя функции почти всегда превращается в указатель на функцию. Единственное исключение - когда это операнд &
, т.е. &task
, он не распадается на указатель функции, но &
все равно преобразует указатель функции в указатель, таким образом если task
обозначает функцию (т.е. это не указатель), оба pthread_create(..., task, ...);
и pthread_create(..., &task, ...);
будут работать одинаково.
Фактически, оператор вызова функции может применяться только в указатели функций:
printf("Hello world");
принимает обозначение функции printf
, а преобразует его в указатель на функцию, а затем вызывает функцию, на которую указывает этот указатель, давая это аргумент "Hello world"
.
Также обратите внимание, что void *task();
- несколько неверное объявление для функции pthread, оно должно быть void *task(void *);
.