1. 程式人生 > >三元運算子,i++(先用後加) ++i (先加後用)區別

三元運算子,i++(先用後加) ++i (先加後用)區別

三元運算子是軟體程式設計中的一個固定格式,語法是“條件表示式?表示式1:表示式2”。使用這個演算法可以使呼叫資料時逐級篩選。 表示式:“()? :”。 ()中進行二元運算 ?在運算,就形成三元運算子  

i++和++i命令的區別有:

1、賦值順序不同

++ i 是先加後賦值;i ++ 是先賦值後加;++i和i++都是分兩步完成的。

因為++i 是後面一步才賦值的,所以它能夠當作一個變數進行級聯賦值,++i = a =b,即 ++i 是一個左值;i++ 的後面一步是自增,不是左值。

形象的理解可以是i++先做別的事,再自己加1,++i先自己加1,再做別的事情。

2、效率不同

比如i=3,b=i++就是說b=3,完成之後讓i變成4,b=++i就是先讓i++變成4,然後b=4,其中++i比i++效率要高些。一般來說在迴圈域裡面,這兩者並沒有什麼很大的區別,但是要注意其生存週期,以及i值在程式流中的變化。

3、 i++ 不能作為左值,而++i 可以。

左值是對應記憶體中有確定儲存地址的物件的表示式的值,而右值是所有不是左值的表示式的值。一般來說,左值是可以放到賦值符號左邊的變數。

但能否被賦值不是區分左值與右值的依據。比如,C++的const左值是不可賦值的;而作為臨時物件的右值可能允許被賦值。左值與右值的根本區別在於是否允許取地址&運算子獲得對應的記憶體地址。

比如:

int i = 0;

int *p1 = &(++i);//正確

int *p2 = &(i++);//錯誤

++i = 1;//正確

i++ = 1;//錯誤

擴充套件資料

當i=5時,s=(++i)+(++i)和s=(i++)+(i++)的值:

1、當i=5時,s=(++i)+(++i)=13 先算第一個(++i),++在前面,就把i先加1再把賦值,即先把i變為6然後再得出(++i)的值為6,這時i已經變為6了,

再計算第二個(++i),++在前面也是先把i加1後再賦值,不過這時的i已經為6了,第一步的時候把i變成6了的,然後加1的話就變成7了,所以第二個(++i)的值為7,s=(++i)+(++i)=6+7=13。

2、s=(i++)+(i++)=11 先算第一個(i++),i在前面,就先賦值再把i加1,即(i++)的值為5,i的值變為6,第二個(i++),i在前面,先賦值再把i加1,這個時候的i已經為6了,即(i++)的值為6,而i已經變為7了。所以s=(i++)+(i++)=5+6=11。

i++ 愛一個人,先愛後嫁,真愛。

++i 先嫁給他,然後再愛,嫁愛。