1

我最近遇到了这行代码:

CustomData_em_free_block(&em->vdata, &eve->data);

我想,不是:

a->b

只是语法糖:

(*a).b

考虑到这一点,这一行可以重写为:

CustomData_em_free_block(&(*em).vdata, &(*eve).data);

如果是这样的话,传入有什么意义

&(*a),作为参数,而不仅仅是 a? 似乎 -(-a) 的指针等效项正在传入,这有什么逻辑吗?

谢谢你。

4

3 回答 3

5

这:

&(*em).vdata

与此不同:

em.vdata

与此相同:

&((*em).vdata)

& 符号获取 的地址vdata,该地址是 所指向的结构的成员em。运算符的.优先级高于&运算符。

于 2010-04-01T03:57:01.353 回答
1

这就是您所缺少的:&em->vdata与 相同&(em->vdata),而不是(&em)->vdata。也就是说,它是vdata指向的结构的成员的地址em。如果您查看的类型应该很清楚em- 它是一个指针。

是的,你总是可以重写a_ptr->member(*a_ptr).member,但何必呢?这就是语法糖的重点。

于 2010-04-01T03:57:12.493 回答
-1

“如果是这样的话,传递 &(*a) 作为参数有什么意义,而不仅仅是 a?”

通常没有。但请注意,您的示例代码没有比较 &(*a) 和 a。您的示例代码比较了 &(*a) 和 b,其中 b 从 a 偏移了从 em 的开头到 em 的 vdata 成员的距离。

于 2010-04-01T03:59:00.840 回答