2011-02-16 76 views
8

我和我的教授正在討論關於C中的+ =運算符。他說+ =或= +會起作用,但他不確定爲什麼= +作品。C編程:+ = vs = +

int main() 
{ 
    int i = 0, myArray[5] = {1,1,1,1,1}; 

    while(i < 5) 
    { 
      myArray[i] += 3 + i; 
      printf("%d\n", myArray[i]); 
      i++; 
    } 

    system("pause"); 
} 

輸出將產生4,5,6,7,8。將+ =運算符更改爲= +會得到相同的結果。然而 - =和=不一樣(這很明顯,因爲它把3當作3)。

所以C大師:

  • 爲什麼用= +這項工作?
  • C編譯器如何處理= +與+ =?
+3

使用什麼編譯器會產生相同的結果? – 2011-02-16 02:33:20

+3

將運算符更改爲= +將生成「3,4,5,6,7」。也許你忘了在重新編譯之前保存源文件? – mtrw 2011-02-16 02:35:05

+2

你的教授無能,應該退休。 – 2011-02-16 06:22:52

回答

22

他錯了; +==+完全不同。

表達式x =+ 3被解析爲x = (+3)
這裏,+成爲(相當無用)一元運算符+。 (與否定相反)

使用一元否定運算符將表達式x =- 3解析爲x = (-3)

1

+也是-的一元運算符。

3

代碼

myArray[i] += 3 + i; 

將產生myArray[i] = myArray[i] + 3 + i;

myArray[i] =+ 3 + i; 

得到myArray[i] = 3 + i

這就是我得到了。

14

你的教授是記住版本C在其中=+=-=*等其實並意味着同樣的事情+=-=*=等(我們談論的不是一般被稱爲的版本舊「K & R」here。Version 6 UNIX,if memory servers。)

當前版本的C,它們並不意味着同一件事;首先等號的版本將被解析,就好像在等號之間和後來的任何內容之間存在空格。這適用於=-=+,因爲-+可以用作一元運算符,所以會生成一個有效的程序(雖然不是您所期望的程序)。

=*=/可以用來解決爭論。a *= 3將乘以3 a,和a /= 3將三個分割,但a =* 3是語義誤差(因爲一元*只能應用於指針)和a =/ 3語法錯誤(因爲/可以被用作一元運營商)。