2017-08-29 16 views
-3
#include<stdio.h> 
int main(){ 
    int i=0,j=1; 
    printf("%d",++(i+j)); 
    return 0; 
} 

このコードでは、増分演算子を使用しましたが、なぜエラーが発生するのかわかりません。なぜlvalueが必要ですか?

これは、エラーがスローされます:

lvalue is required.

+3

インクリメント演算子は、そのオペランドとして左辺値を必要とします。つまり、更新する*変数*が必要です。あなたは 'i + j'に' ++ 'を適用して何を言おうとしていましたか?正確に何を増やそうとしましたか? – AnT

+4

'(i + j)'はあらかじめインクリメントすることはできませんが、 '1+(i + j)'のように '1'を加算することができます。 –

+3

コンパイラは '++(1)'を試して怒っています。 – BLUEPIXY

答えて

3

あなたが変数に割り当てられていない整数値をインクリメントしようとしています。あなたが最後のバージョンで見ることができるように、あなたは無効である、++1を呼び出そうとしている

printf("%d",++(i+j)); 

// expanded step 1 
printf("%d",++(0+1)); 

// expanded step 2 
printf("%d",++(1)); 

あなたのコードを取ると、これはコンピュータが何をしようとするどのような程度です。

++を使用して値を増加させるために、オペランドは、一体、フローティング、またはポインタ型を有していなければならず、修正L値式(const属性無し式)でなければならない:あるいは

int x = i+j; 
printf("%d",++x); 

printf("%d",i+j+1); 
0

Cでは、1項演算子も数字を適用できません。最初に偽造の間の値が評価されると、単項演算を使用する前に。その結果を変数に代入する。あなたのpreviusコードが動作します

#include<stdio.h> 
int main(){ 
    int i=0,j=1, other_value=0; 
    other_value = i+j; 
    printf("%d",++(other_value)); 
    return 0; 
} 

あなたは結果をインクリメントカントエラー

error: lvalue required as increment operand 
+1

Re "* Cでは単項演算子も数字を使用できません*"、そうではありません: '!0'、'〜0' – ikegami

0

を取得します。代わりに

printf("%d",i + j + 1); 
0

アン「左辺値は、」割り当ての対象となり得る値です。 "l"は等号の左側にある "left"を表します。右辺値は右辺値であり、値を生成し、直接割り当てることはできません。 "左辺値が必要"になっている場合、左辺値が必要なときに右辺値を生成する式があります。あなたのケースで

コンパイラは、式を操作するとき、それは下記てみ++ 1

で無効な式になります:

のprintf( "%dを"、私がj + 1 + 1);

0

++(i+j)は割り当てできません。ここでは、式(i+j)が最初に評価されます。 ++演算子の場合、オペランドは整数型、浮動小数点型またはポインタ型でなければならず、変更可能なl値式でなければなりません。 i+jの結果は一定の値であるため、エラーlvalue required as increment operandが返されます。この式をi+j+1として変更することができます。

関連する問題