我不熟悉用于描述event
的术语,因此我无法成功Google查询该主题,以便了解更多信息;我也未能在SO上找到任何东西。
以下是来自The Linux Programming Interface的代码片段:
*((int *) arg)
static void *threadFunc(void *arg)
{
int loops = *((int *) arg)
...
}
int main(int argc, char *argv[])
{
pthread_t t1;
int loops, s;
loops = (argc > 1) ? getInt(argv[1], GN_GT_0, "num-loops") : 10000000;
s = pthread_create(&t1, NULL, threadFunc, &loops);
...
}
做什么以及这种现象叫做什么?感谢。
答案 0 :(得分:2)
它将指针取消引用*some_pointer
和转换(some_type)some_value_with_some_other_type
结合起来。这样做基本上是“Hey C编译器,我知道你认为这是一个void*
,但我认为它应该是一个int*
,你可以这样对待吗?哦,当你是在它,给我int
指针指向“。
答案 1 :(得分:2)
arg
是一个指针,用于存储int
s = pthread_create(&t1, NULL, threadFunc, &loops);
^^^^^^
但是在函数threadFunc
中,它被声明为类型void *
而不是int *
static void *threadFunc(void *arg)
^^^^^^^^^
因此在这个表达中
int loops = *((int *) arg)
首先将指针再次解释为类型int *
(int *) arg
然后取消引用它获取它指向的对象
*((int *) arg)
答案 2 :(得分:1)
它读取整数类型' int'来自指针变量' arg'中的内存地址。 '(int *)'是一个类型转换,以便编译器将位重新解释为指向int的指针而不是指向void的指针。
答案 3 :(得分:1)
从arg
判断我认为指针将保存一个指向函数的指针,这种技术在Linux中使用很多,你应该寻找的是callbacks
这些被调用的函数具体条件和程序员经常声明一个变量,它包含一个回调的通用原型(在你的情况下是一个接受一个整数的指针)并根据事件为该指针分配一个回调,然后在需要时调用它。 p>