括弧のないオペレータのアドレス -- c フィールド と operator-precedence フィールド 関連 問題

Address-of operator with and without parentheses












4
vote

問題

日本語

func(&a->b) が既にある場合は、行<コード> func(&(a->b)) を追加したカーネルパッチに出てきました。 <コード> &a->b および &(a->b)

の違いはありますか。

説明して​​ください。

英語

I came across a kernel patch which added a line func(&(a->b)) when there was already func(&a->b). Is there any difference between &a->b and &(a->b)?

Please explain.

</div
     
       
       

回答リスト

3
 
vote

差はないため、読みやすさのみです。 -> は、 & Reference演算子よりも優先順位が高いです。 ここ。

さらにこの証拠を持っているため、これらの線の解散を見ています:

いくつかの短いコード

<事前> <コード> struct A { int b; }; int main() { struct A *a; int *c; c = &a->b; // Disassemble these lines. c = &(a->b); return 1; }

両方の線の解離は次のように相当します。

<事前> <コード> movq -16(%rbp), %rax movq %rax, -8(%rbp)

ここでのコードを試してみてください。

 

There is no difference, this is only for readability. the -> has a higher precedence than the & reference operator. See here.

To further this proof, have a look at the dissasembly of these lines:

Some short code

struct A {    int b; };  int main() {    struct A *a;     int *c;     c = &a->b; // Disassemble these lines.     c = &(a->b);     return 1; } 

The dissasembly of both lines equates to the following:

    movq    -16(%rbp), %rax     movq    %rax, -8(%rbp) 

Try the code in here to see for yourself.

</div
 
 
   
   
0
 
vote

いいえ。 ->foo foo の任意の値について)は、Postfix演算子であり、 & (プレフィックス演算子)よりも高い優先順位があります。

 

No. ->foo (for any value of foo) is a postfix operator and has higher precedence than & (a prefix operator).

</div
 
 
0
 
vote

違いはありません。 -> コンポーネント選択演算子は、Unary & 演算子よりも優先順位が高いため、式<コード> &a->b は<コード> &0 として解析されています。そして、結果は、 &12 が指すインスタンス内のメンバー<コード> &1 のアドレスです。

 

There is no difference. The -> component selection operator has higher precedence than the unary & operator, so the expression &a->b is parsed as &(a->b), and the result is the address of the member b in the instance pointed to by a.

</div
 
 

関連する質問

8  Scala Parserコンビネータを使用してコードを変更する方法は、オペレータの優先順位を考慮に入れるのですか?  ( How to change code using scala parser combinators to take operator precedence in ) 
文法のこの部分を考察する: <事前> <コード> def expression = SimpleExpression ~ opt(relation ~ SimpleExpression) def relation = "=" | "#" | "<=" ...

45  A =(A ++)*(A ++)はJavaで奇妙な結果を与えます[閉じた]  ( A a a gives strange results in java ) 
現在立つにつれて、この質問は私たちのQ&AMPにとって良いフィットではありません。フォーマット。私たちは事実、参考文献、または専門知識によって支持されることを期待していますが、この質問は...

2  NET 4.5.2のdebug.assert(条件、InterpolatedStringMessage)の評価の順序  ( Order of evaluation for debug assertcondition interpolatedstringmessage in n ) 
私はC#/。Net 4.5.2ここでの奇妙な問題につまずいた... 私は !ContainsKey() を Debug.Assert() で Debug.Assert() を使用して、見つかった場合は、so のように見つかった場合は値を含む補間文字列を使用し...

5  連結Haskell variantを作る:適用と構成の優先順位  ( Making a concatenative haskell variant precedence of application and compositio ) 
私は、ConcateAnationの言語の基本を学びます。このオリジナルのアイデアは、Haskellのように機能アプリケーションではなく機能アプリケーションと同じであるということです。 喜び、ForthまたはFactorはPostfixです。 ファンクショ...

3  C ++演算子「&」と「 - >の優先順位  ( Priority of c operators and ) 
次のものを考慮してください。 <事前> <コード> &row->count (行 - &gt; count)は評価されるか(&amp;列) - gt; C ++で評価されますか? 編集:ここは素晴らしい link ...

6  CSS優先順位注文?私の講義スライドは正しいかどうか?  ( Css precedence order my lecture slides are correct or not ) 
私はすでに似たような質問と回答の数がいくつかあることに気づいたが、ここで私の特定の質問を最初に明確にさせてください: 私はこのような州の講義を持っています: > http://mindinscription.net/webapp/csstest/preced...

19  MySQLまたは/と優先順位?  ( Mysql or and precedence ) 
私はどのように疑問や働きますか? 表示されているすべての行を取得したい場合は= 1 私はただ WHERE tablename.display = 1 を行うことができます とディスプレイ= 1または2 のどこにすべての行が欲しいのなら 私はただ WHERE...

4  Precedenceパーサーは式だけでなく?  ( Using precedence parser not only for expressions ) 
簡単なプログラミング言語のためにある種のオペレータ優先パーサーまたはションヤードアルゴリズムを使用することは可能ですか?たとえば、この言語では表現、関数と変数の宣言のみがある場合 この方法の短所と長所は何ですか?伝統的なLL / LRパーサーよりもはるかに速く...

838  これらの構成要素は、前後の未定義の行動を使用してこれらの構成要素がありますか?  ( Why are these constructs using pre and post increment undefined behavior ) 
<事前> <コード> getenv()1 ...

1  目的Cにおける多数関数呼び出し前のパラメータ評価順序  ( Parameter evaluation order before a variadic function call in objective c ) 
関数への引数の評価順序は、指定されていないことを知っています(例えば、ここに)。 これ以外の質問これを克服する回避策があるようです。ただし、すべてのシステムで確実に機能していないようです(iOSやMac OSをターゲットにしています)。 だから、私の質問は次...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有