虚空星和&C

Fat*_*ebi 5 c pointers pthreads

我在C中有指针问题,这是C中的一个线程示例.这段代码是用"高级Linux编程"一书编写的:

void* print_xs (void* unused)
{
    while (1)
    fputc (‘x’, stderr);
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

和:

int main()
{
    pthread_t thread_id;
    pthread_create (&thread_id, NULL, &print_xs, NULL);
    while (1)
        fputc (‘o’, stderr);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么print_xsvoid*

    我找到了答案,但对我来说还不够清楚.答案:这声明了一个指针,但没有指定它指向的数据类型

  2. 它与返回值有关吗?

  3. 还为什么void*数据类型用于"未使用"(void*unused)?

  4. 我不确定为什么在pthread_create中的print_xs之前使用"&"?这是正确的说:pthread_create在另一个库中,我们想告诉它运行pthread_create函数,但它不知道这个函数在哪里,所以我们告诉它函数的地址.

Jer*_*yal 8

void指针(void*)是一个没有与之关联的数据类型的指针.void指针可以保存任何类型的地址,并且可以存储为任何类型.

例如:

int a = 10;
char b = 'x';

void *unused = &a;  // void pointer holds address of int 'a'
unused = &b; // void pointer holds address of char 'b'
Run Code Online (Sandbox Code Playgroud)

是的,void* print_xs()有返回类型的void指针.

pthread_create (&thread_id, NULL, &print_xs, NULL); pthread_create函数传递的地址thread_idprint_xs