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 は、em の開始点から em の vdata メンバーまでの距離に関係なく、a からオフセットされます。

于 2010-04-01T03:59:00.840 に答える