2014年7月5日 星期六

遞增運算子i++與++i的差異

  今天在看一個bug的問題,發現一個for loop裡頭的遞增條件為++i。問了資深同事後才發現自己在這個小細節上沒有理解得很清楚,現在再來幫自己重新複習一遍。

  以C語言為例舉個例子。在宣告完一個int變數i=0,若想將它加1,則可使用i=i+1。我們能用更簡單的方法表示,表示法為i++或++i。

  i++與++i的差異是在回傳值的不同。同樣都是代表i=i+1,但是i++會回傳舊的i值,也就是0;++i會回傳新的值,也就是1。

  現在直接用程式碼來說明最清楚。我們用兩種不同的程式碼來說明。

程式碼1:
output:
i=1
i=1
a=0, b=1
從程式碼1可以發現a是先接收舊值,i才加1;b是等i加1後,b接受i的新值1。

程式碼2:

output:
The first one for loop (i++),
i=0
i=1
i=2
i=3
i=4
The second one for loop (++i),
i=0
i=1
i=2
i=3
i=4

會發現兩種for loop結果相同,這是因為i++或++i都在執行完loop內的程式碼後才做的動作。
for (i=0;i<5;i++)
{
    /* 一些程式碼 */
}
用while loop表示相當於:
int i=0;
while (i<5)
{
    /* 一些程式碼 */
    i++; /* 最後一步才做 */
}

沒有留言:

張貼留言