将指针指向指向结构内指针的指针

时间:2017-12-01 20:30:56

标签: c pointers struct void-pointers

我正在编辑其他人的代码并尝试理解它。该函数传入参数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,我需要在函数返回时指向二进制文件的数据。

3 个答案:

答案 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*类型的复合文字。

相关问题