C語言的++和--對於初學者來說一直都是難題,甚至很多老手也會產生疑惑;
最大的問題在於 ++可以放在變量后面,也可以放在前面;
如 i++; ++i;
自減運算符與++原理一樣,只是變量變價為減而已,下面我們主要就以++為例;
實力剖析:
例題一:
int i = 3, j = 4;
i++;
++j;
Console.WriteLine(i);
Console.WriteLine(j);
對此大家都不會有什么疑惑,輸出結果是4和5;下面我們來做一個小改動:
int i = 3, j = 4;
int a=i++;
int b=++j;
Console.WriteLine(a);
Console.WriteLine(b);
結果又是多少呢?這里就開始出現++后置和++前置的區別了,結果是3和5;
1. ++后置:第一步計算返回結果,與變量相同,第二步將變量的值自增1(通俗的講就是先返回結果並將結果賦值給變量a,然后再自增)
2. ++前置:第一步計算返回結果並且自增1,第二步將變量的值自增1(通俗的講就是先自增1,然后返回自增1的結果,然后賦值給變量b)
很明顯 a=i++,是先把i=3賦值給a,然后i再自增;
b=++j,是先把j自增為5,然后再賦值給b;
其實基本道理就是這樣,但在更復雜的情況下又是如何呢,咋們來看看:
例題二:
int i = 3, j = 4;
int a=i++ + i++;
int b=++j + ++j;
Console.WriteLine(a);
Console.WriteLine(b);
上面的結果是7和11;
咋們來看下 a=i++ + i++;第一個i++ 這里返回結果為3,然后i自增為4;由於運算還沒有結束,故這個時候不會立即把3賦值給a;再看第二個i++,這個時候i為4,故返回結果為4;所以a=3+4;輸出7
b=++j + ++j;第一個++j,j自增為5並且返回5;第二個++j,j這時候是5自增為6並且返回6;故b=5+6;輸出11;
來點復雜的
例題三:
int i = 3, j = 4;
int a=i++ + j++ + --i + ++j;
int b=--j + j++ + i-- + i++ + --i ;
Console.WriteLine(a);
Console.WriteLine(b);
上面的執行代碼,解析為下面就是:
a = 3 + 4 + 3 + 6 = 16;
b = 5 + 5 + 3 + 2 + 2 = 17;
如果你的結果不是這個,希望再看下上面的例題1和2;