鑑於:
int x = 256, y = 4;
printf("%d\n\n", x++ + ++y);
簡而言之:的x++
返回值256
然後遞增x
至257. ++y
增量y
至5,並返回值5
。因此,增加了256和5,產生了261
。
龍windedly:的x++
評估爲的x
的電流值,其是256
和時間表的y
x
到257.同樣++y
調度增量的增量爲5,求增加值5
。因此,增加了256和5,產生了261
。涉及x
和y
的條款的評估順序沒有定義,但是在添加之前都必須對兩者進行評估(儘管在評估添加時增量可能不完整)。因爲在參數(和表示函數的表達式)已經被評估但函數被調用之前存在「序列點」,所以當調用printf()
時,增量必須是完整的。
接下來的兩條語句打印爲x
和y
爲257
和5
。
請注意,這兩個printf()
操作可以合併爲一個。如果不調用未定義的行爲,它們都不能與第一個結合。 (有關該主題的更多信息,請參閱Multiple increments and undefined behaviour)。
因此,考慮到我不會很好地表達它的寫法,您似乎有正確的解釋。另外,標準C在所有功能上都要求返回類型超過15年(因爲C99已標準化)。你應該寫:
int main(void)
的main()
函數不帶任何參數。 (見What should main()
return in C and C++?的全部細節。)
注意,這個問題只能調用完全定義的行爲(至少,在printf()
語句)。它不會詢問序列點之間的單個變量的多個增量。
這都是變量何時被打印的問題。如果預增量,則在增量後打印該變量。如果後增量,變量在增量前打印。 – user3629249
'main()'不正確。使用['int main(void)'](http://stackoverflow.com/q/204476/995714)而不是 –