2013-05-10 41 views
-6

C中以下行的含義是什麼?執行順序是什麼?C中雙方增量

float *x,*y; 
*x++=*y++ 

任何人都可以解釋如何評估?

+1

gcc說:'錯誤:作爲左操作數所需的左值' – wroniasty 2013-05-10 19:34:17

+1

有多少錯誤答案出現是令人着迷或令人傷心的。 – 2013-05-10 19:35:16

+1

@wroniasty你應該做出這個答案:) – stardust 2013-05-10 19:35:55

回答

10

提供原代碼:

x++ = y++ 

這條線將永遠不會被評估,因爲它不是合法的C,也不會被編譯。 x++的結果不是左值,不允許在任務的左側。

對於更新的代碼:

float x,y; 
*x++ = *y++ 

這是不合法的,因爲*不能應用於float

我將添加以下代碼:

float *x, *y; 
*x++ = *y++; 

這個代碼表示:

  • 讓一個臨時的,說float *xt,等於x
  • 讓一個臨時的,比如float *yt,等於y
  • 加一個到x
  • 加一個到y
  • 指定*xt = *yt

的實際操作可以以各種順序來執行,提供xt取其值x被更新時,yt取其值之前y被更新之前,並xtyt在使用之前它們被定義。

+0

這是確切的答案.... +1你的先生。 – 2013-05-10 19:42:59

0

如果兩個變量是int(或另一種簡單類型),則原始語句(x++=y++)是非法的。但是,在指針算術的情況下,這是合法的。單程複製一個字符串,其中既xychar *,是

while (*x++ = *y++); 
在這種情況下

,指針對應的字符被複制後,直到它遇到串結束字符遞增循環迭代(一在y指向的字符串中。

+0

該死,一些downvote快樂的傢伙在這裏。我想我也知道那是誰。無論如何,這個答案沒有錯,所以+1。 – dasblinkenlight 2013-05-10 19:40:29

+0

謝謝,我自己在想這件事。無論如何,我發現問題也發生了變化(儘管它仍然是錯誤的)。 – unxnut 2013-05-10 19:41:43

+0

@dasblinkenlight:你可以顯示'x'和'y'的聲明,使得'x ++ = y ++'編譯?如果不是的話,那麼「這是合法的」的陳述,甚至被限定爲「在指針算術的情況下」是不正確的。 「如下所示的修改後的陳述是合法的」陳述可能是真實的。反對票不是永久的;如果答案被編輯了,我會重新考慮它。 – 2013-05-10 19:42:43