我试图了解pthread_create
和pthread_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;
}
答案 0 :(得分:0)
void foo()
表示函数foo可以接受任意数量的未知类型的参数,而
void foo(void *)
表示函数foo采用类型void *
的参数
这就是程序编译的原因,因为您的函数可以接受任何类型的参数,包括void *
参数void *
是一个无效指针,没有任何关联的数据类型。它可以保存任何类型的地址,并且可以类型转换为任何类型。
要了解foo()
和foo(void *)
之间的区别,请参见here