遞增與遞減運算子
遞增運算子(increment operator)就是傳說中的**++,就是每次作用讓變數增加1,遞減運算子則是減少1**,++與--運算優先順序很高。
遞增與遞減運算子又分為前置和後繼,說白話一點就是先做與後做。
Source Code
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=100;
i++;
printf("i=%d\n",i);
i=100;
++i;
printf("i=%d\n",i);
}
執行結果
這個例子不管i是先++還是後++都是101,原因是因為i並無做其他處理,所以就沒有優先的問題,如果有其他處理的話,就看得出來差別了。
Source Code
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int total=0,i=100;
total=i++;
printf("total=%d,i=%d\n",total,i);
total=0;
i=100;
total=++i;
printf("total=%d,i=%d\n",total,i);
}
執行結果
程式中
total = i++;
它是屬於後加,所以先將i指定給total後,再將i加1。
total = ++i;
則屬於前加,先將i加1,再將i指定給total。
兩者差異是非常大的。
看完以上示意圖,各位大大可否懂?
下個例題將複雜一點點,給我做好準備吧!!
Source Code
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=100,j=200;
int total=0;
total=i++ +j;
printf("total=%d, i=%d, j=%d\n",total,i,j);
total=0;
i=100;
total=++i +j;
printf("total=%d, i=%d, j=%d\n",total,i,j);
return 0;
}
執行結果
這邊最大的不同在「total=i++ +j」和「total=++i +j」,看起來好像很難很厲害,其實就騙人的把戲而已。
程式中的
total=i++ +j;
我們說過++的優先順序很高,它高過+和=,但它屬於後加型,這時會出現孔融讓梨的精神,先處理計算和指定的動作( total = i + j ),之後再將i加1,所以total等於100加200,而處理完之後i會為101,j不變。
接下來,將total和i再設回原點。而
total=++i +j;
此時他是前置加,它會發揮當仁不讓的精神,先將i加1,之後再處理計算和指定的動作( total = i + j ), 所以total等於101加200, i為101,j不變。