2015-12-12 101 views
0

在下面的循環中,將如何評估sum += n --?我非常,非常混亂......C中for循環的操作順序

int sum; 
for(sum=0;n>0;sum+=n--); 
+1

@以上評論:在C中有許多構造無法通過實驗發現,因爲它們是未定義的。請參閱http://stackoverflow.com/questions/949433/why-are-these-constructs-using-undefined-behavior。 – Quentin

+0

再一次,停下來。寫作。垃圾。碼。如果它很混亂,你爲什麼要這樣寫呢?你爲什麼不把它分開? –

回答

5

對於sum += n--以下操作執行

  • 添加nsum
  • 遞減n

隨着sum += --n

  • n遞減
  • n新值被添加到sum

n--被稱爲後減量--n被稱爲預遞減

3

這顯然與後做predegement操作。預先減量操作首先減小該值,然後用於其他操作,而後減量操作首先用於操作(在該情況下爲加法),並且僅在此之後減小該值。

總而言之,該訂單將如下:

  • sumn
  • n遞增遞減
0

一個很簡單的例子,我想在於向世人證明。 讓我們考慮兩個變量a=1b=4 聲明a=b將分配B到A的價值,

在聲明a=b++,首先b值分配給a,然後的b值遞增。

如果a值爲1和b值爲4,然後使用a=b++後,的a值將成爲4和b值將變成5。

聲明a=b++可以

同樣顯現爲

a=b;

然後

b=b+1;

,你的情況,你有 sum+=n--可以細分

sum=sum+(n--)

sum=sum+n

然後

n=n-1

這裏再次的sum+n第一值將被分配給sum,那麼n值將被由1

遞減