[dlsym][(void**)]关于(void**)及其相关的详细理解
时间: 2023-11-14 12:03:06 浏览: 27
(void**)是一个指向指针的指针,也称为二级指针。它可以用于访问指针的指针,通过它可以实现多级指针的访问。
在C语言中,dlsym()函数用于在共享库中查找指定的符号,并返回与该符号关联的地址。dlsym()函数返回的地址是一个void*类型的指针。然而,由于我们不知道这个指针所指向的变量类型,因此我们需要将它转换为正确的类型。
这时,就需要使用(void**)来接收dlsym()返回的指针,因为我们不知道这个指针指向的类型,只有在运行时才能确定。通过使用(void**),我们可以将这个指针转换为正确的类型,并对其进行操作。
总之,(void**)是一个指向指针的指针,用于访问指针的指针,并且常常用于类型转换和多级指针的访问。
相关问题
[dlsym][(void**)]关于(void**)及其相关的理解
(void**)是一个指向指针的指针,也就是说,它是一个指针数组的首地址。在C语言中,void*可以指向任何类型的指针,因此(void**)可以表示一个指向任何类型的指针数组的指针。在使用dlsym函数时,它返回一个void*类型的指针,该指针指向指定名称的符号地址。而使用(void**)作为参数,则表示将返回的指针强制转换为指向指针的指针,方便后续对返回指针进行解引用操作。因此,(void**)在dlsym函数中的使用,可以方便地获取指向函数或变量的指针,并进行后续操作。
[dlsym][(void**)]关于(void**)及其相关的详细理解,请举例
(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**)类型的指针来存储动态链接库句柄的地址。