void star 和 & 在 C 中

void star and & in C

我对 C 中的指针有疑问,这是 C 中的线程示例。 此代码写在 "Advanced Linux Programming" 书中:

void* print_xs (void* unused)
{
    while (1)
    fputc (‘x’, stderr);
    return NULL;
}

和:

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

   return 0;
}
  1. 为什么 print_xsvoid*

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

  2. 是否与return值有关?

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

  4. 我不明白为什么pthread_create中的print_xs前面要用“&”? 这样说是否正确:pthread_create 在另一个库中,我们想告诉它给 运行 pthread_create 函数,但它不知道这个函数在哪里,所以我们告诉地址这个功能给它。

void pointer(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'

是的,void* print_xs() 有 return 类型的 void 指针。

pthread_create (&thread_id, NULL, &print_xs, NULL);pthread_create函数中传递thread_idprint_xs

的地址

注意 在 C 中不是有效的单引号。复制粘贴时要小心。

1) print_xs()是一个线程函数,它的return类型应该是void*。参见 pthread_create()

2) 和 3) 完全没有。该线程将 void* 作为参数。因此函数定义采用 void*。但它没有被使用(正如它的名字所说)。

4) 函数前的&不是必须的。但是拥有它也不会受到伤害。两者是等价的。

1,2.) 该函数是 returning 一个指向未指定数据类型的指针;这意味着它可以是任何类型的数据,并且您应该已经知道如何处理它(任何类型转换,或将 return 分解为可用的东西 - 文档应该能够让您了解关于即将发生的事情)。

3.) 未使用的参数是指向未指定类型的指针。同样的情况,只是在上行方向。

4.) 引用对我来说有点模糊,但如果我的大脑没有让我失望,它基本上是在说 "the actual object to which thread_id is a pointer." 被调用的函数将把它作为一个对象来处理,而不是通过一个指针来访问它。