这有什么意义:*(void**)(&;fptr)=dlsym(handle,";my_function";)`
代码来自此页面: 你能帮我理解吗? 它获取函数指针的地址,将其强制转换为void**并取消引用。我不知道为什么要这样工作这有什么意义:*(void**)(&;fptr)=dlsym(handle,";my_function";)`,c,C,代码来自此页面: 你能帮我理解吗? 它获取函数指针的地址,将其强制转换为void**并取消引用。我不知道为什么要这样工作 我感谢你的帮助!到目前为止,我得到的唯一建议是“从右向左读取”或类似“从右向左循环读取”之类的内容。该函数返回一个函数指针。这段代码说,嘿,拿我的函数指针变量,给我它的地址。将其强制转换为void**。现在遵从void**并将void*=的值设置为我从调用中获得的指针。代码的含义是: 取fptr的地址。此表达式的类型是指向函数指针的指针(某些特定类型) 将该指针表达式强制转换
我感谢你的帮助!到目前为止,我得到的唯一建议是“从右向左读取”或类似“从右向左循环读取”之类的内容。该函数返回一个函数指针。这段代码说,嘿,拿我的函数指针变量,给我它的地址。将其强制转换为
void**
。现在遵从void**
并将void*=的值设置为我从调用中获得的指针。代码的含义是:
fptr
的地址。此表达式的类型是指向函数指针的指针(某些特定类型)fptr
,就像它是void*
类型的对象一样void (*fptr)(); // or whatever function pointer type you want
void *temp = dlsym(handle, "my_function");
memcpy(&fptr, &temp, sizeof fptr);
*(void**)(&fptr)=dlsym(句柄,“我的函数”)代码>
为了简化这一点
fptr
是一个指针
&fptr
是该指针的地址
您正在将其键入指向空指针的指针
然后引用并分配函数的返回值。我也无法理解它。我会使用fptr=(fptr_t)dlsym(…)
,其中fptr_t
是fptr
@vhallac的实际类型:POSIX中备注/示例的作者声称,C标准要求您的强制转换生成警告。然而,我在C标准中找不到这样的要求。这就是他们用自己的方式写的原因,但请看我的答案,为什么他们的解决方案是无效的。@R。。我做到了(你的答案和他们的理由)。老实说,到目前为止,我还没有把这当作一个问题。谢谢你的回答。今天我学到了一些关于C的新知识。:)