簡単に言えば、
&someObject->someAttribute.someMember;
に相当
&(someObject->someAttribute.someMember);
また
(&someObject)->someAttribute.someMember;
また
(&(someObject->someAttribute)).someMember;
それとも、安全のために明示的な括弧を本当にそこに置くべきですか?
簡単に言えば、
&someObject->someAttribute.someMember;
に相当
&(someObject->someAttribute.someMember);
また
(&someObject)->someAttribute.someMember;
また
(&(someObject->someAttribute)).someMember;
それとも、安全のために明示的な括弧を本当にそこに置くべきですか?
これは以下と同等です:
&((someObject->someAttribute).someMember)
->
との.
優先順位は等しく、左結合です。単項 - の&
優先順位は低くなります。
非常に複雑な式がある場合は、括弧を使用して物事をグループ化し、コードを明確にする必要があります。ただし、これは特に複雑ではありません。このようなコードは、C および C++ でよく見られます。
ウィキペディアを参照してください
[演算子]セクションまで下にスクロールします。チャートの上のボックスの演算子は、下のボックスの演算子の前に考慮されます。結合性の規則も参照してください。
それとも、安全のために明示的な括弧を実際に配置する必要がありますか?
これは多少好みの問題ですが、原則として、それを理解するのに問題がある場合は、他の誰かもそうします。疑わしい場合は括弧を付けてください。
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);