在C中将指针取消引用作为参数的目的

Lei*_*sen 1 c pointers indirection

我最近出现了这行代码:

CustomData_em_free_block(&em->vdata, &eve->data);
Run Code Online (Sandbox Code Playgroud)

我想,不是:

a->b
Run Code Online (Sandbox Code Playgroud)

只是语法糖:

(*a).b
Run Code Online (Sandbox Code Playgroud)

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

CustomData_em_free_block(&(*em).vdata, &(*eve).data);
Run Code Online (Sandbox Code Playgroud)

如果是这样的话,传递的重点是什么

&(*a),作为参数,而不只是一个?似乎指针等效于 - ( - a)正在传入,是否有任何逻辑?

谢谢.

Jam*_*lis 5

这个:

&(*em).vdata
Run Code Online (Sandbox Code Playgroud)

与此不一样:

em.vdata
Run Code Online (Sandbox Code Playgroud)

它与此相同:

&((*em).vdata)
Run Code Online (Sandbox Code Playgroud)

&符号获取地址vdata,该地址是指向的结构的成员em.该.经营者具有比更高的优先级&运营商.