首页 > 解决方案 > 用作指针的函数名

问题描述

我有这个功能:

void *task();

并且名称 task 用作另一个函数中的参数:

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

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

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

void *(*start_routine)(void*)

编辑:

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

感谢您的时间。

标签: cfunctionpointerspthreads

解决方案


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


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

printf("Hello world");

获取函数指示符printf 并将其转换为指向函数的指针,然后调用 this 指针指向的函数并为其提供参数"Hello world"


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


推荐阅读