我最近出现了这行代码:
CustomData_em_free_block(&em->vdata, &eve->data);
我想,不是:
a->b
只是语法糖:
(*a).b
考虑到这一点,这一行可以重写为:
CustomData_em_free_block(&(*em).vdata, &(*eve).data);
如果是这种情况,那么传递的内容是什么?
&(* a),作为参数,而不只是一个?看起来像 - ( - a)的指针等效传入,是否有任何逻辑?
谢谢。
答案 0 :(得分:5)
此:
&(*em).vdata
与此不同:
em.vdata
与此相同:
&((*em).vdata)
&符号取vdata
的地址,em
是.
指向的结构的成员。 &
运算符的优先级高于{{1}}运算符。
答案 1 :(得分:1)
以下是您遗失的内容:&em->vdata
与&(em->vdata)
相同,而非(&em)->vdata
。也就是说,它是vdata
指向的结构的em
成员的地址。如果你看一下em
的类型,它应该是清楚的 - 它是一个指针。
是的,您始终可以将a_ptr->member
重写为(*a_ptr).member
,但为什么要这么做呢?这就是语法糖的重点。
答案 2 :(得分:-1)
“如果是这种情况,传入&(* a)作为参数的重点是什么,而不仅仅是?”
通常没有。但请注意,您的示例代码不会比较&(* a)和a。您的示例代码比较&(* a)和b,其中b与a的距离从em的起点到em的vdata成员的距离偏移。