用作指针的函数名

Name of a function used as a pointer

我有函数:

void *task();

并且名称任务在另一个函数中用作参数:

pthread_create(..., task, ...);

这是特例还是函数名称包含其地址这一事实总是正确的?

上面pthread_create的参数应该是一个指针:

void *(*start_routine)(void*)

编辑:

void *task()
{
    printf("I am a simple thread.\n");
}

感谢您的宝贵时间。

没有特例——恰恰相反!函数名几乎总是衰减为指向函数的指针。唯一的例外是当它是 & 的操作数时,即 &task,它不会衰减为函数指针,但 & 无论如何将函数指示符转换为指针,因此如果 task 指定一个函数(即它不是指针),则 pthread_create(..., task, ...);pthread_create(..., &task, ...); 都将相同。


事实上,函数调用运算符可以应用于函数指针:

printf("Hello world");

接受函数指示符 printf 将其转换为指向函数的指针,然后调用该指针指向的函数并为其提供参数 "Hello world".


另请注意,void *task(); 对 pthread 函数的声明有些不正确,它应该是 void *task(void *);