dlsym()
列出Annotation configuration model
*(void **) (&cosine) = dlsym(handle, "cos");
作为转换dlsym()
的返回值的解决方法。
这里*(void **) (&cosine)
的含义是什么?我理解cosine
是之前定义的函数指针,但我不确定为什么在名称之前需要&符号&
(没有&
的错误)。此外,我不明白为什么void *
(void **
)的指针会再次与*
一起使用。
答案 0 :(得分:2)
让我们一次打开它:
&cosine
这需要一个指向变量cosine
的指针,因此这将是一个指向函数指针的指针。
(void **) &cosine
我们将指针指向函数指针转换为指针到指针的指针。
* (void **) &cosine
我们取消引用已转换的指针,将dlsym()
的结果分配给它。
实际上,正在发生的事情是问题的一个重要步骤。我们假设dlsym()
是cosine
(通过间接级别)并分配给它,而不是将void *
的结果转换为正确类型的函数指针。