我已经声明了一个结构“node”,它有一个成员变量'm',然后定义了两个变量,如下所示
struct node t, *p;
在该计划的后期,我将t
的地址指定为p
:
p = &t;
要访问成员变量,我需要使用p->m
。
但我想使用*
运算符,但编写*p.m
会出错。为什么会这样?
答案 0 :(得分:9)
为此你必须看到运营商的优先权。
.
运算符的优先级高于*
运算符。
像*p.m
一样编写它会使编译器认为它是*(p.m)
。
您必须使用(*p).m
。
答案 1 :(得分:2)
这是因为operator precedence。
表达式*p.memberVariable
等于*(p.memberVariable)
。即它尝试将p.memberVariable
取消引用作为指针,而不是p
。这将给你一个编译器错误,因为p
是一个结构的指针,你可以使用点运算符来选择结构成员。
您需要明确告诉编译器使用括号p
取消引用指针(*p).memberVariable
。
答案 2 :(得分:1)
由于运算符优先级,*p.memberVariable
将无效。请(*p).memberVariable
或p->memberVariable