你好,有一个函数,它接受一个指针参数,指向一个结构体指针。我在访问结构体成员时遇到问题。结构指针的行为与其他类型的指针不同,还是我只是缺少一些必要的东西?
struct mystr {
int num;
};
void fun(mystr **out) {
printf("%d",**out.num); <-- where the problem arises
}
最佳答案
不,“结构指针”(无论您的意思是什么)的工作方式与指向其他类型的指针完全相同。
您只需要记住operators precedence :
.
结构体成员访问
->
通过指针访问结构体成员
(...)*
间接(解除引用)
(...)
因此您的表达式 **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/