不带参数的pthread_create函数

时间:2018-10-31 08:25:03

标签: c arguments pthreads

我试图了解pthread_createpthread_join的工作方式。我以为pthread_create的第三个参数只允许一个参数为void *的函数。我用gcc编译了下面的代码,效果很好。但是为什么呢?

void *foo() {
    return 0;
}

int main() {
    pthread_t thread_id;
    int par = 5;
    pthread_create(&thread_id, NULL, foo, &par);
    pthread_join(thread_id, NULL);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

void foo()

表示函数foo可以接受任意数量的未知类型的参数,而

void foo(void *)

表示函数foo采用类型void *的参数 这就是程序编译的原因,因为您的函数可以接受任何类型的参数,包括void *

参数void *是一个无效指针,没有任何关联的数据类型。它可以保存任何类型的地址,并且可以类型转换为任何类型。

要了解foo()foo(void *)之间的区别,请参见here