近些年來,各種筆試題就喜歡出這種自增自減運算子,這種題目若沒有好的解題方法很煩人,今天我就教你接這種題目的方法,以後都是送分題。
小夥伴們先測試一下自己的水平:
int main()
答案是:i = 6,num = 8;(你算對了嗎?)
我們都知道i++是先使用完再自加,而++i是先自加再使用;
問題就出在完上面,何時算完,當遇到「函式的()」「,」「;」算結束
好了,我們一點一點分析吧:i= 2,i一直都等於2,,一直等到i + i + i + i等於8賦給num之後,i才開始自增,這就叫使用完之後再自加。
再看一題:int i = 2;num = (++i)+(++i)+(++i)+(++i);求i,num。
看著題之前我們先明白一件事:就是計算3+2+5+4這個式子是不是先看到3和2 然後執行加法對吧,這題也一樣,我們先看到第乙個 i (i=3),然後看到第二個i(此時i=4),然後再執行加法4+4,然後看到第三個i(i=5),前面的結果和第三個 i 相加,8+5,然後看到第四個 i(i=6),
將前面的結果和 i 相加13+6=19=num,所以這題num=19;i=6;
是不是還有點迷糊,好,我們再看一題:i=2;
i = i *((i++)+(++i));求 i ,首先我們找到兩個 i 求加法發現括號裡面的乙個是(i++),乙個是(++i),根據先前所講的(i++)先不自加,所以i=3,3+3=6,然後6和外面的3相乘=18,,最後才執行(i++)=19,所以i的值為19;記得(什麼時候i++,要遇到結束符函式的(),和;這是i才++)。
為了驗證心中所想,我們再看一題:i=2;
i=(i++)+(++i)+(++i)+(i++);求 i ,3+3=6,6+4=10;10+4=14;14+1=15;15+1=16;
好了,上面的題目估計也已經會了,
下面在函式引數傳遞時怎麼算:
int f(int a,int b)
int main()
函式傳參時還怎麼計算呢?
老師總結乙個規律,i++等於數值,++i,i=變數名
我們看第乙個f(i++,i++),對了,還有一點,函式在傳參是從右向左傳的,先看最右邊的i++ 它等於數值所以是2,因為遇到逗號,所以(i=3)然後看左邊的i++,它等於數值是3
所以值是3,2
我們再看f(i++,++i);++i等於i,(此時i=3)然後i++等於3,然後遇到i++(此時i=3),然後結束,i=4,所以值是3,4
看一道複雜點的:f(++i,++i,i++,++i,i++),我們從最右邊開始(,2)(,i,2)(4,i,2)(i,i,4,i,2),然後所有的i等於7,所以答案:77472
**我總結這種函式傳參的方法是所有++i和i都等於i最大值
i++等於它右邊的的i 的值**舉個例子,i++,++i,i,i++,++i
等於( 5, i, i,3,i)【i++右邊加幾次就是幾】
i等於最大值6,最後答案(5,6,6,3,6);
i 和i 的用法
式1的運算過程 第一步,第乙個 i計算後i 1,i計算的結果為1 第二步,然後就是i 的計算後i的值不變仍為1,i 的計算結果為1 第三步,接著計算前一步驟中i 自增後的值,此時i 2,再就是第二i 的計算,i的值不變仍是2,所以這一步中i 的計算結果為2 第四步,同上一步計算前一步驟中i 自增後的...
i和i 的區別
大家都應該知道i 和 i的區別,前者是先使用i的值,然後再增加1,而後者是先增加1然後再使用i的值。但是i 和 i那個更好呢?我們實現角度來看 前者是將i值加1後賦給i,然後返回i本身 而後者是先用個臨時變數儲存i值,然後將i值加1賦給i,然後返回臨時變數的值。內建資料型別他們的效率差不多,看他們的...
i 和 i 的輸出
include include include int main int argc,const char argv 輸出結果為 3 3 3 1 0 0 在vs中 printf輸出時,從輸出表示式右到左計算,然後從右到左入棧,再出棧 vs中的彙編下的 5 int main int argc,const...