我正在编辑其他人的代码并尝试理解它。该函数传入参数void **dst_val
。指针不是很好。我已经查看了堆栈溢出的所有远程相关帖子,但没有找到我要找的东西。
我有一个结构:
typedef struct {
u_int img_out_len;
char *img_out_val;
} img_out;
我声明了一个指向结构的指针:
img_out *clnt_res;
并为其分配内存。
现在,我很困惑。我需要设置void **dst_val
指向结构指针内的img_out_val
指针,我无法弄清楚语法。为什么这些不正确,哪些是正确的?
dst_val = (void *)(*clnt_res).img_out_val; //wrong
dst_val = (void **)clnt_res->img_out_val; //wrong
我还应该注意img_out_val
指向二进制文件的数据。
修改
由于函数传入void **dst_val
,我需要在函数返回时指向二进制文件的数据。
答案 0 :(得分:1)
如果frslm的anser不够好,你也可以试试
&(void*)clnt_res->img_out_val;
答案 1 :(得分:0)
由于clnt_res->img_out_val
为您提供了char *
,因此您需要获取该地址(最终得到char **
),然后再将其作为void **
:< / p>
(void **)&clnt_res->img_out_val;
答案 2 :(得分:0)
假设您必须致电
void foo(void ** ppv);
然后绕过任何演员问题/问题这样做:
{
void * pv = &clnt_res->img_out_val;
foo(&pv);
}
甚至更短:
{
foo(&((void*){&clnt_res->img_out_val}));
}
请注意,上述void*
不表示演员,但定义了void*
类型的复合文字。