2

簡単に言えば、

&someObject->someAttribute.someMember;

に相当

&(someObject->someAttribute.someMember);

また

(&someObject)->someAttribute.someMember;

また

(&(someObject->someAttribute)).someMember;

それとも、安全のために明示的な括弧を本当にそこに置くべきですか?

4

3 に答える 3

10

これは以下と同等です:

&((someObject->someAttribute).someMember)

->との.優先順位は等しく、左結合です。単項 - の&優先順位は低くなります。

非常に複雑な式がある場合は、括弧を使用して物事をグループ化し、コードを明確にする必要があります。ただし、これは特に複雑ではありません。このようなコードは、C および C++ でよく見られます。

于 2010-09-24T14:40:54.850 に答える
3

ウィキペディアを参照してください

[演算子]セクションまで下にスクロールします。チャートの上のボックスの演算子は、下のボックスの演算子の前に考慮されます。結合性の規則も参照してください。

それとも、安全のために明示的な括弧を実際に配置する必要がありますか?

これは多少好みの問題ですが、原則として、それを理解するのに問題がある場合は、他の誰かもそうします。疑わしい場合は括弧を付けてください。

于 2010-09-24T14:48:38.190 に答える
0

someMember のアドレスが必要な場合は、&(someObject->someAttribute.someMember) OR &someObject->someAttribute.someMember.

最初に someObject->someAttribute 、2 番目にそのメンバー somMember 、3 番目に & アドレス

構造体 xxx{ int xx; }; struct temp{ int x; 構造体 xxx ptr; };

    struct temp t1 = {125,{127}};
    struct temp *t2 = &t1;
    printf("%d %d",t2->x,*&t2->ptr.xx);
于 2010-09-24T15:09:17.287 に答える