[dlsym][(void**)]关于(void**)及其相关的详细理解,请举例
时间: 2023-11-14 19:35:55 浏览: 92
(void**)是一个指向指针的指针类型,它可以用来存储一个指向任意类型指针的指针变量的地址。在C语言中,使用(void**)类型通常是为了在函数之间传递指向不同类型指针的指针。
一个常见的使用场景是在动态链接库中使用dlsym函数获取某个函数的地址。dlsym函数的原型是:
void* dlsym(void* handle, const char* symbol);
其中,void**类型的参数handle是一个指向动态链接库的句柄的指针。当调用dlopen函数打开一个动态链接库时,它会返回一个指向动态链接库的句柄的指针。这个句柄可以用来获取动态链接库中的函数地址,例如:
void* handle = dlopen("libtest.so", RTLD_LAZY);
void (*hello)() = dlsym(handle, "hello");
hello();
在上面的代码中,我们首先使用dlopen函数打开一个名为"libtest.so"的动态链接库,并将返回的句柄存储在handle变量中。然后,我们使用dlsym函数获取名为"hello"的函数的地址,并将其转换为一个函数指针hello。最后,我们调用hello函数。
注意,dlsym函数返回的是一个void*类型的指针,因此我们需要将其转换为正确的函数指针类型。在这个例子中,我们将其转换为void (*)()类型,表示一个没有参数并返回void的函数指针。
总之,(void**)类型的指针可以用来存储任意类型指针的指针变量的地址,通常用于在函数之间传递指针。在动态链接库中使用dlsym函数获取函数地址时,也可以使用(void**)类型的指针来存储动态链接库句柄的地址。
阅读全文