我遇到了一个内核补丁,当已经func(&(a->b))
时添加了一行func(&a->b)
。 &a->b
和&(a->b)
之间有什么区别吗?
请解释。
答案 0 :(得分:3)
没有区别,这只是为了便于阅读。 ->
的优先级高于&
引用运算符。请参阅here。
为了进一步证明这一点,请看一下这些行的消解:
一些简短的代码
struct A {
int b;
};
int main() {
struct A *a;
int *c;
c = &a->b; // Disassemble these lines.
c = &(a->b);
return 1;
}
两条线的解集等同于以下内容:
movq -16(%rbp), %rax
movq %rax, -8(%rbp)
尝试使用here中的代码自行查看。
答案 1 :(得分:0)
没有。 ->foo
(对于foo
的任何值)是后缀运算符,其优先级高于&
(前缀运算符)。
答案 2 :(得分:0)
没有区别。 print "You can get", wrong, "% back with text corrections"
组件选择运算符的优先级高于一元->
运算符,因此表达式&
被解析为&a->b
,结果是成员{{1}的地址1 {}在&(a->b)
指向的实例中。