1樓:
在vc++6.0的環境下,現計算()內的第乙個++i,再計算第二個++i,計算完後再去計算i+i,此時i=7,所以7+7=14。
再舉個例子:(這個例子比你的情況更詭異)
i=3;b=(++i)+(++i)+(++i);結果b=16。
分析:首先掃瞄求解前半部分,即(++i)+(++i)的值(先對i進行兩次自增運算,i的值變為5,再計算i+i的值為5+5=10),然後再求解後半部分,即10+(++i)的值(先對變數i自增1次,i的值變為6,再計算10+6=16)。
所以說,你的程式沒有問題,在沒有弄清編譯環境的情況下,不要使用沒有把握的運算,很容易出問題的
2樓:悠悠小鳥鳥
之所以導致結果不同,是因為 c語言標準裡,對於二元運算子「+」,不規定加號之前和加號之後的表示式哪個先求解,完全由編譯器自己決定。而且也不規定必須先算完乙個才能算另乙個。
也就是說, 對於 "expr1 + expr2",(其中expr1,expr2都可能是復合表示式),不同的編譯器想先算exp1就先算exp1,想先算exp2就先算exp2。而且,編譯器不必保證exp1計算完畢之後才去計算expr2,它可以這麼做,也可以不這麼做。c語言標準裡並不做規定。
一段正常的程式不應該由於加號前後的求解順序不同而得到不同的結果。
因此,理解了結果不同的原因即可,沒必要討論結果到底是多少。
不妨參考如下文章《表示式的***》,寫的很精彩: http://blog.
3樓:匿名使用者
我試了用vc和dev-c++都是一樣的結果。
先解釋x的值。++i返回值是i的位址裡面存的內容,兩次相加之後,該位址記憶體的數是7,而兩個++i都返回它,也就是兩個7相加,自然是14
對於y,i++的返回值是加之前的數,i的位址中的內容尚未發生改變。比如
增加int k,l;
相應的語句改為y=(l=(i++))+(k=(i++));cout<<"l="< 可以看到k與l都等於5就是證明。所以兩個++i都反回了5,加起來就是10 4樓:謝應宸 這個完全是根據編譯器來定的 可以用不同的編譯器來編譯一下,然後將得到的檔案進行反彙編讀一下反彙編後的**就會發現不同的編譯器執行的內容是不一樣的我很久以前做過這個實驗 5樓: x=(++i)+(++i);x = 13 i = 7 y=(i++)+(i++);y = 10; 我這樣認為,但是vs2010輸出是14 10 6樓:pp要洗洗 x=(++i)+(++i); 可能先執行了i+1,i+1 再將i和i相加。。這時i為7了已經 y=(i++)+(i++); 參考以前看過的書執行完 y=i+i後再i+1,i+1最後i也是7你可以試試看我這種想法! (只是個猜測,應該不會誤人子弟吧) 7樓:匿名使用者 不同的編譯器出來的結果自然不同了。。。 這世界上能編寫c程式的玩意,除了vs系列以外,還有gcc g++ objectc,等等,vc只是其中的一小部分而已。 不同的編譯器,壓棧方式不同,資料對齊不同,甚至資料大小端都不同,複雜著呢。 8樓:匿名使用者 我執行也是和你一樣的結果,我的是vs2005 ,我感覺不是編譯器的問題,就想這個c=a+++b,有的說先計算a++,再加b,也有的說是先計算++b,還什麼++的優先順序,也很多人說是編譯器問題,但我看到一本書講解,根本不是編譯器問題,是c系統按規則處理的,有規律的,在任何編譯器下結果都一樣的。 大家講的不錯,但我執行 異次元の鎖 說的b不是16而是18。樓主自己試試 ,所以感覺是這樣的,i返回的都是同一位址儲存的值,於是等該表示式結束時,i才返回,所以返回的是最後一次i儲存的值,這樣可以解釋你說的情況了,不知道這樣誤人子弟了沒有,還請高手指點啊 c++中,int i=1; 表示式(i++)+(++i)+(i--)的結果是多少?最終i值又是多少? 9樓:匿名使用者 這是乙個多語句的縮寫 int i=1,j; j=(i++)+(++i)+(i--);相當於 i++; j=i+i+i; i++; i--; //把寫在前面的++或--先用語句計算,同理寫在後面的後用語句計算即可 結果j=2+2+2=6,i=2 c++問題 執行語句for(i=1;i++<4;);後變數i的值 10樓:匿名使用者 樓上的說法不對,建議看看書,i++和++i的區別。同樣是把i+1,i++返回的是+1前的值,++i返回的是+1後的值 當i=3時,執行i++後,i變成了4,但i++返回值是3,因此滿足條件,迴圈繼續。 當i=4時,執行i++後,i變成了5,而i++返回值是4,跳出迴圈。 所以最後i是5 11樓:匿名使用者 ++操作分兩種,乙個是i++,乙個是++i。i++表示i先賦值,後加1;++i表示先加1後賦值。以下面為例: int d; int i; i = 2; d = i++; 那麼d的值是2,i的值為3,即i的值先賦給d,之後i再自增。 若為d = ++i;則d的值為3,i的值為3,即i先自增,後賦值。 題目中i++<4即i先與4比較,後自增1,相當於i<4,i = i+1; 當i變化為4時,4<4不成立,但i=i+1仍然執行,但不執行迴圈體。迴圈結束,故i最終變化為5。(其實最後一句才是最重要的。) 12樓:z粽 ++是個後置的運算子~也就是說i++ < 4這個條件中的i用的是自增運算前的值~ 再比如: int main() 這樣的話,程式執行得到的顯示是「c=3;a=3」 就是在計算c = (a++) + b的時候a還是2的值~在語句執行完之後才進行自增哦~ 所以你那個語句裡,在最後不滿足i++ < 4時,i其實是剛好等於4,迴圈執行完之後就變成5了~ 那麼 如果想讓他最後是4的話,你應該用前置自增 就是「++i < 4」~~這和我們平時對自增的認識是一樣的 ----- 希望幫到你 13樓:匿名使用者 當i加到4時,迴圈條件不滿足,跳出迴圈,但是i還要加一次,因為i++是先使用i比較後再加1的,所以i的值是5。 14樓:無月⑥聲 for(i=1;i++<4;) ;for後面跟著乙個空語句~~當然是i一直在迴圈到i=5不符合i++<4跳出for迴圈啦~~~ 所以i是5,呵呵~~ i++<4 是先做i<4的判斷然後再i++的,呵呵 15樓:匿名使用者 對於i++<4,即先判斷i<4,再執行i++; 當i=4時,i<4不成立,退出for語句,再i++,故最後i=5 16樓:匿名使用者 i++是先使用i的值後,再執行i=i+1 當i=4時,求解i++<4不成立,但求解過程是先使用i的值,4<4為假,但接下來要再執行i=i+1, 所以i值就為5了 17樓:匿名使用者 這是很基礎的問題啊...樓上給了很多這方面的知識,好好學...說明你基礎不紮實,多注意這些細節對你程式設計有幫助 c++中int i(1),sum(0); for(i=1;i<=10;i++) sum=sum+i; cout< 18樓:訪澄慧號暈戳 【1】int是c++語言中基本資料型別中的整型。 【2】sum指的是返回某一單元格區域中的數、邏輯值及數字的文字表示式之和。 【3】int i(1),sum(0);即int i=1,sum=0;意思是把字母i定義為整型常量,把i賦值為1。把具有「總和」意思的英文單詞sum定義為整型常量,把sum賦值為0。 【4】延伸一下:整型常量由正整數、負整數和零擔當。 【5】for是迴圈語句,通常用於重複指定次數的迴圈。 【6】對於for(i=1;i<=10;i++)sum=sum+i;意思是:對具有初始值為1的i,迴圈加1,迴圈i的值小於等於10就停止執行運算,輸出的迴圈值10是sum=sum+i式中第2個sum的值。最終輸出值為sum的值,即sum=sum+i表示式中第1個sum值,sum=10+1=11。 因為sum是i值的總和,又因為cout<
【7】i=11的運算過程: i的初始值為1 即i=1; i=i+1=2; i=i+1=3; i=i+1=4; i=i+1=5; i=i+1=6; i=i+1=7; i=i+1=8; i=i+1=9; i=i+1=10; 因為i<=10,所以此時進入sum=sum+i的表示式運算中。輸出的迴圈值10是sum=sum+i式中第2個sum的值,最終輸出的值為sum的值,即sum=sum+i中第1個sum值,sum=10+1=11。因為sum是i值的總和,又因為cout<
(希望幫到你!) 19樓:弦訴相思 很簡單,i從1遞增到了10,最後一次迴圈的判斷條件是,i<=10,此時i=10,正常通過,然後執行一次sum+=i,執行完後for語句裡面的i++又被執行了一次,所以此時i=11,然後下次判斷i<=10的時候結果是false,因此跳出迴圈 20樓:紅藍塞思克 i的值是1 ,sum是0 迴圈加 i迴圈一次自加一次 加到11 不符合條件 退出 21樓:匿名使用者 當 i == 11時,正好退出這個for迴圈(i <= 10),所以輸出的i就是11. 22樓:匿名使用者 判斷完i<=10之後,還會進行i++的計算啊,i=11後在判斷i<=10,不符合調出迴圈了,所以輸出11唄 在c++語言中,i++與++i有什麼區別 23樓:匿名使用者 先看一段**: #include int main() ++和++i的區別就是: i++ :先引用,後增加 ++i :先增加,後引用 換句話就是: i++ : 先在i所在的表示式中使用i的當前值,再讓i加1++i : 先讓i加1,再在i所在的表示式中使用i的新值取決於++和i的相對位置: ++在i前面,i先加1,然後在表示式中用i的值;++在i後面,先在表示式中用i的值,然後i再加1。 24樓: 兩者都會將i自增1,區別是返回值。 i++返回i自增之前的值,++i返回i自增之後的值。 比如,i=1 a=i++,則a=1,i=2,a為i自增前的值a=++i,則a=2,i=2,a為i自增後的值 c++中, int i=1;while(i++<5);後i的值是幾? 25樓:草叢裡的落葉 i 的結果是6; while(i++<5); //先判斷,後i++; 當i=4時,確定迴圈,後i++,此時i=5;再迴圈,判定不迴圈,後i++;所有i的值是6. 樂海白 1 以c 控制台應用程式為例 int input console.write 輸入4個整數,之間以逗號分隔。回車鍵結束輸入.r n string str console.readline 讀入一行使用者輸入信 string nums str.split new char 以逗號為分隔符,分離... 如果函式有返回值,則需要返回語句return。return語句的一般形式是 return 表示式 執行時,先計算出括號中表示式的值,再將該值返回給主調函式中的呼叫表示式。下面對return語句做一些說明 1 函式的返回值是通過函式中的 return 語句獲得的。return 語句將被呼叫函式中的一個... 一 資料型別在它自己的記憶體分配中儲存資料,則該資料型別就是 值型別 值型別包括 1 所有數字資料型別 2 boolean char和date 3 所有結構,即使其成員是引用型別 4 列舉,因為其基礎型別總是sbyte short integer long byte ushort uinteger或...用C找出陣列中的最大值和最小值,用C 找出陣列中的最大值和最小值
C 程式設計中返回值問題,c 獲得外部程式返回值的問題
c什麼是值型別什麼是引用型別,c 中什麼是值型別什麼是引用型別