C語言中自增自減運算符的深入剖析
行業科技
作者:李文廣等
【摘要】本文從多方麵對自增自減運算符分析、講解,以便讓初學者能夠清晰自增自減運算符的運算規律,學會其靈活的用法,掃清學習C語言的一個障礙。
【關鍵詞】C語言,運算符,自增自減,結合性
在眾多的計算機程序設計語言中,C語言以其靈活性和實用性受到廣大計算機應用人員的喜愛,並且也成為許多高職院校計算機專業類學生的必修課程。C語言中自增自減運算符由於使用非常靈活,成為了初學者學習C語言的難點之一。下麵我從幾個方麵來剖析一下自增自減運算符的應用。
1自增自減運算符基本應用
C語言中提供了自增(++)、自減(--)運算符。它們的作用是使被操作變量值增加1或減少1。
自增(自減)運算符寫在變量的前麵稱為前置自增(減),如++i,--i,寫在變量的後麵稱為後置自增(減),如i++,i--。
1)前置自增(自減):變量i先自增(自減)1,然後再使用變化後i的值。
2)後置自增(自減):先使用變化前變量i的值,然後i再自增(自減)1。
例一:int i=3,j=3;
i++;++j;
printf("%d,%d\n",i,j);
結果:4,4。若第2行語句改成自減語句i--;和--j;其結果:2,2。
2自增自減運算符的實戰應用
2.1在賦值語句中的應用
賦值語句中,前置式自增自減,先進行自增自減運算,再進行其它運算;後置式,先進行其它運算,後進行自增自減運算。
例二:int i=3,j=3,a,b;a=++i;b=j++;
printf("%d,%d,%d,%d\n",a,b,i,j);
結果:4,3,4,4。若第2行語句改成自減語句a=--i;b=j--;其結果:2,3,2,2。
分析:“++前置”:i自增1後變為4再參與賦值運算,則a=4,i=4;“++後置”:j先參與賦值運算,把3賦值給b後,j的值再自增1變為4,則是b=3,j=4。
2.2在循環結構中的應用
C語言程序設計提供了三種循環:for循環、while循環、do…while循環。
在for循環中,for語句最簡單的應用形式也可理解為如下形式:for(循環變量賦初值;循環條件;循環變量增值){
} 其中循環變量增值語句一般用自增(自減)運算符來實現。如“i++”或“i--”,其中i稱為循環變量。循環中一般隻注重循環變量的值,而不注重循環變量所在表達式的值,所以自增(自減)的前置和後置作用相同。 例三:int sum=0,i=0; for(;i sum=sum+i; 分析:循環結構中的i++作用:通過循環變量不斷加1,使循環條件趨於不滿足。 在while和do…while結構中,自增自減運算符一般放於循環體中。 2.3在函數調用中的應用 若自增自減運算符用於函數實參表達式,則函數執行過程是將實參表達式值按照從右至左的順序入棧,入棧前就將實參表達式的值計算完畢。因此,如果函數有多個參數,則它們是按照從右至左的順序計算。 例四:mul(int a,int b) {printf("%d\n",a*b);} main() {int i=3;mul(i,++i); } 結果:16。 分析:在調用語句mul(i,++i)中,按從右至左的順序計算,相當於mul(4,4)。 2.4在指針中的應用 在C語言中,指針指向一定的數據對象時,可以前後移動來指定新的對象,這時就可以通過自增自減運算符來實現,主要作用是用來修正地址。 例五:int a[10]={1,2,3,4,5},*p=a; for(;p 結果:1 2 3 4 5 分析:p=a,將指針指向a[0]的地址,p++,指針向後移動指向下一個元素的地址。 3自增自減運算符的注意事項: 3.1自增自減運算符隻能作用於變量。自增自減運算符都是單目運算符,即隻能對一個變量施加運算,運算結果仍賦予該變量,不能用於常量或表達式中。(a+b)++、3++等運算是錯誤的。 3.2自增自減運算符的結合性。自增自減運算符為“右結合”,就是從右到左依次計算。表達式-i++,相當於-(i++),若變量i為3,則表達式結果是-3。 3.3多運算符的分配問題。若出現多個運算符相連,分配原則是:自左至右盡可能多的將若幹個字符組成一個運算符。 3.4自增自減運算符的重複出現問題 在表達式中出現多個相同的自增自減運算符時,運算過程和單個自增自減是不同的。 例六:int i,p; i=3;p=(i++)+(i++)+(i++);printf("p=%d,i=%d\n",p,i); i=3;p=(++i)+(++i)+(++i);printf("p=%d,i=%d\n",p,i); 結果:p=9,i=6; p=16,i=6 分析:在第2行語句p=(i++)+(i++)+(i++)中,自增運算作為後置式,變量i本身先參加算術運算,即p=3+3+3=9,再按照“自右至左”的結合性進行自增運算,最後i的值為6。說明後置式自增運算符“先使用後改變”的“改變”是指在下一條語句執行前統一改變,而不是剛用完就變。 第4行語句在VC環境下表達式p=(++i)+(++i)+(++i),相當於p=(((++i)+(++i))+(++i)),最後i的值為6。但在TC環境下,先按照“自右至左”的結合性進行自增運算,i的值變為6,再進行加法運算,即18。 4總結 以上探討了自增自減運算符在C語言程序中多個方麵的應用,希望對理解和使用自增自減運算符能有所幫助,從而為學好這門重要的語言課程打下紮實的基礎。