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;
}
为什么 print_xs
是 void*
?
我找到了答案,但对我来说还不够清楚。答案:
这声明了一个指针,但没有指定它指向的数据类型
是否与return值有关?
还有为什么 void* 数据类型用于 "unused"(void* 未使用)?
我不明白为什么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_id
和print_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." 被调用的函数将把它作为一个对象来处理,而不是通过一个指针来访问它。
我对 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;
}
为什么
print_xs
是void*
?我找到了答案,但对我来说还不够清楚。答案: 这声明了一个指针,但没有指定它指向的数据类型
是否与return值有关?
还有为什么 void* 数据类型用于 "unused"(void* 未使用)?
我不明白为什么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_id
和print_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." 被调用的函数将把它作为一个对象来处理,而不是通过一个指针来访问它。