关于结构和指针,如何使用点运算符编写此表达式x->x->x
?
使用箭头操作符:x->x->x
我轻松访问第三个元素。使用点运算符:(*x).x
如何使用点运算符访问第三个元素?
我知道箭头操作符是点运算符的快捷方式,因此应该可以使用点运算符到达第三个元素?我可以使用变量:
struct node *var
var = (*ptr).next
(*var).x = some value
这真让我烦恼。一直在寻找教科书和互联网上的任何地方,无法找到答案。
答案 0 :(得分:7)
好x -> x
相当于(*x).x
所以你只做了两次:
(*(*x).x).x
.
比一元*
更紧密,因此优先顺序有效。如果你感到偏执,你可以这样做:
(*((*x).x)).x
答案 1 :(得分:2)
考虑x->y
相当于(*x).y
,然后应用该规则两次:
x->x->x;
(*x).x->x;
(*(*x).x).x;
答案 2 :(得分:2)
你从不想在现实生活中这样做,但是
(*p1).x
是x
;
p1
(*((*p1).p2)).y
是y
指向的对象中的成员p2
,p1
是(*((*((*p1).p2)).p3).z
指向的对象中的成员,
z
是p3
指向的对象中的成员p2
,p1
是{{1}}指向的对象中的成员,{{1}}是{{1}}指向的对象中的成员。 {1}}。
这完全有可能用较少的括号来完成,但它们肯定有助于理解。
答案 3 :(得分:1)
(*(*x).x).x
但为什么,为什么????
答案 4 :(得分:0)
嵌套解除引用...
(*(*x).x).x
我想让你在那里。至于你为什么要做这样的事情......丑陋,丑陋,丑陋。