2012-04-20 12 views
1

代わりのC式の代入演算子を使用するのに有効ですか?

cardNumber = j+1; 
deck[i][j] = cardNumber; 
theDeck[k] = cardNumber; 

はそれだけで、同時にデッキとtheDeckの両方にcardNumberプロパティを割り当てることが

deck[i][j] = theDeck[k] = cardNumber; 

を言うために有効である??

+2

試してみるとコンパイラはあなたに何を伝えますか? –

+1

はい - 代入式(x = y)の値はx –

+0

に割り当てられているものです。いくつかのコンパイラ設定でコンパイラの警告が表示されることがあります(例文はわかりませんが、if文これは関連している)。 'if((status = func(...)))goto exit;'(警告はあなたが何か「間違っている」ためではなく、見た目のためにではありません==は意図された使用でした)。 –

答えて

5

はい、そうです。代入演算子は値を返します。

+0

または、どのように私はそれを言うだろう: "代入演算子は式です。"つまり、Pythonのような他の言語にある「代入文」とは別に設定します。 Cは "文脈コンテキスト"内の(すべての)式を許すだけです。 (Pythonは 'x = y = 42'を許しますが、' x =(y = 42) 'は特殊な文の構造であることを示していません)。 –

1

はい、それは式であり、その値は代入の右側です。これは=の関連性からも来ることに注意してください(右から左)になりれ、この:

x = y = z 

相当:

x = (y = z) 

でもない:だから

(x = y) = z /* wouldn't work */ 

さらに進んで書いてください。

theDeck[k] = deck[i][j] = cardNumber = j+1; 
+0

これは括弧を使って行全体の優先順位を決めることができますか? – brianSan

+0

@brianSanはい、可能です。しかし、それは必要ありません。オペレータの結合性はすでにそうしているからです。 'x = y = z = a'は' x =(y =(z = a)) 'とちょうど同じです。 – sidyll

0

はい、そうです。これは次のようなものです:

deck[i][j] = (theDeck[k] = cardNumber); 
関連する問題