2014-10-28 32 views
0

這裏是我的代碼爲什麼我在增量錯誤得到一個無效的左值

#include <stdio.h> 
    int main(void) 
    { 
      int x[] = {10,20,30}; 
      *(x) ++; 
    } 

當我嘗試編譯此,我「在增量無效的左值」得到一個錯誤。我不明白爲什麼有任何無效的價值。我知道數組名是一個指向數組中第一個元素的指針。是不是 *(x)++與*(x)= *(x)+ 1相同?所以x [0]現在會是11.有什麼我失蹤?我不改變數組指針。我知道這將是一個錯誤。

+0

刪除括號。 – 2014-10-29 00:00:40

+0

沒有工作。我在這裏有正確的想法嗎? – committedandroider 2014-10-29 00:01:19

+3

我的不好,改爲'(* x)++;'後置增量運算符的綁定比解除引用運算符更緊密,所以圍繞'* x'的括號是必需的。 – 2014-10-29 00:02:47

回答

3

後增加運算符(expr++)的綁定比解除引用運算符更緊密,因此您需要在*x周圍使用括號。這是你所需要的:

(*x)++; 

沒有他們,你想增加x,然後取消對它的引用。由於x是一個數組,因此不可修改,這就是爲什麼你得到你的錯誤,因爲x++是不允許的。

+0

確實更緊密地綁定了平均優先級? – committedandroider 2014-10-29 00:06:53

+0

是的,這意味着'x'和'++'在'x'和'*'之前放在一起。 – 2014-10-29 00:07:47

1

數組的名稱是一個左值,它不能在C中修改,因此會出錯。

關於:

不是*(x)的++相同*(x)= *(X)+ 1?

答案是「否」。 ++(postifix增量)運算符有higher precedence而不是*(取消引用)。所以

*(x) ++; 

相當於

*(x++); 

你可以這樣做:

(*x)++; 

或另一種方式是(更容易讀取一個海事組織;-)

x[0]++; 
相關問題