c - 指向结构体指针的指针

标签 c pointers struct

你好,有一个函数,它接受一个指针参数,指向一个结构体指针。我在访问结构体成员时遇到问题。结构指针的行为与其他类型的指针不同,还是我只是缺少一些必要的东西?

struct mystr {
int num;
};

void fun(mystr **out) {
  printf("%d",**out.num); <-- where the problem arises
}

最佳答案

不,“结构指针”(无论您的意思是什么)的工作方式与指向其他类型的指针完全相同。

您只需要记住operators precedence :

  1. . 结构体成员访问
    ->通过指针访问结构体成员
    (...)

  2. * 间接(解除引用)
    (...)

因此您的表达式 **out.num 被解释为 *(*(out.num)) 和您的 (out.num) 不是指针,因此对其应用星号是错误的。

您需要将表达式的适当部分括起来以强制非默认运算符绑定(bind):(**out).num – 首先取消引用out两次才能到达一个 struct mystr 变量,然后访问该变量的 num 成员。

-> 运算符作为访问指向结构成员的快捷方式:
(ptr_expr)->member_name 相当于 (*(ptr_expr)).member_name
因此您可以将 (**out).num 替换为 (*out)->num

关于c - 指向结构体指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47202236/

相关文章:

objective-c - 从数组创建 .json 文件

c - 使数组显示错误值的结构

c - 如何通过在c中敲击 "esc"来关闭窗口?

c - GCC 的代码覆盖率选项如何工作?

c++ - 将 vector 传递给函数(指针/地址)

go - 遍历具有嵌入结构的结构

c++ - 查看接收到的指针是字符串、ushort 还是数组

c++ - 不复制 char 数组,函数 swap 不能正确编译并且 stringPtr 没有被修改

c - 访问传递给 void* 指针的结构元素

c - 这一系列的 C typedef/struct/union/enum 定义有什么意义?