用作指针的函数名
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 *);
。
我有函数:
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 *);
。