2013-10-15 70 views
6

執行下面的代碼片段後,爲什麼int d 25而不是26的值?執行n ++後奇怪的答案

int n = 20; 
int d = n++ + 5; 

Console.WriteLine(d); 
+5

可能的重複[有什麼區別++ i和i ++](http://stackoverflow.com/questions/24853/what-is-the-difference-between-i-and -i) –

+0

另請參閱:https://communities.coverity.com/blogs/development-testing-blog/2013/09/24/cc-and-c –

回答

10

n++是「後增值運算符」,它只在之後遞增值其初始值已用於周圍的表達式。

您的代碼就相當於:

int d = n + 5; 
n = n + 1; 

其價值被使用之前增加值,使用++n的預先遞增運算符。

+1

+1用於突破相同的無用語法。 –

3

因爲您需要使用++n來使用該表達式中遞增的值。

看,在表達式樹它不是遞增n,然後使用,附加了價值,因爲n++返回n的價值,但它增加了使用的下一個表達式。

但是,++n實際上將返回此表達式的遞增值n

因此,n++ + 5產生25,而++n + 5產生26

2

n++表示執行操作後的adition,所以第一個d將等於n+5,然後n會得到提升。

2

因爲n++將首先分配值和迭代完成後它會增加這就是其給予25

因此原因,

int d= n++ + 5; 

被解釋爲

int d = n + 5; 
+0

爲什麼downvote ?????? – Neel

1

因爲你正在使用Postfix的表達

int d = n++ + 5; 

其中編譯器首先將值分配給d,但在以下

int d = ++n + 5; 

你會得到D的值26

1

++:後遞增運營商。

post ++ x ++運算符的結果是操作數的值。可獲得這樣的結果 後,將操作數的值被遞增

因此,

int d= n++ + 5; 

在上述interpretaion執行後解釋爲

int d = n + 5; 

n被加1。