2016-09-02 6 views
0

申し訳ありませんが、これは愚かな質問ですが、私はJavaScriptの背景から来て私を混乱させるCで書かれたこの行に遭遇しました。Cの割り当て文IFの文

これは、データ[q]にsを代入していますか?

+2

はい、あなたは正しいシーケンスポイントと副作用でこの[ article ]をお読みください。これは議論されている[ここで](http://stackoverflow.com/questions/151850/why-would-you-use-an-assignment-in-a-condition) – byxor

+0

基本的には、データ[q] != 0です。Cでは、0以外はすべて真です。 (もちろんsにはデータ[q]が割り当てられます)。 – Nidhoegger

答えて

5

はい、割り当ては...割り当てますが、それはまた式です。 0に等しくない値はtrueと評価され、0はfalseと評価されます。

それはあなたのコードがsdata[q]を割り当て、その後ifステートメントにsを返し

if ((s = data[q]) != 0) return s; 
+0

「1と評価されました」とは本当に混乱しています。「ゼロ以外の値が真と見なされる」ようなものです。 – unwind

+0

ありがとう、あなたの答えを受け入れました – cocacrave

3

と同じになります。 s0に等しくない場合、コードはsを返します。それ以外の場合は、次の命令に進みます。

short s; 
s = data[q]; 
if (s != 0) 
    return s; 
+0

ああ、面白いです。だから0以外の値?私がJavaScriptから学んだことは、もし何かを返すならば。 – cocacrave

+0

「0」でないすべての値はCでtrueと見なされます。 –

2

基本的にCは式を評価:

またはそれ以上は、それが次のように展開すると述べました。

s = data[q] 

data[q]の値は、ここでは、式の値であり、条件はそれに基づいて評価されます。

割り当て

s <- data[q] 

はちょうどside-effectです。


+0

ありがとう – cocacrave

関連する問題