iT邦幫忙

DAY 13
1

30天C語言巔峰之路系列 第 13

30天C語言巔峰之路(Day13:運算子-遞增與遞減運算子)

遞增與遞減運算子

遞增運算子(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不變。


上一篇
30天C語言巔峰之路(Day12:運算子-邏輯運算子)
下一篇
30天C語言巔峰之路(Day14:運算子-運算子的運算優先順序)
系列文
30天C語言巔峰之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言