C 中,xii 和y ii的值

時間 2021-10-14 23:03:19

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="<用C找出陣列中的最大值和最小值,用C 找出陣列中的最大值和最小值

樂海白 1 以c 控制台應用程式為例 int input console.write 輸入4個整數,之間以逗號分隔。回車鍵結束輸入.r n string str console.readline 讀入一行使用者輸入信 string nums str.split new char 以逗號為分隔符,分離...

C 程式設計中返回值問題,c 獲得外部程式返回值的問題

如果函式有返回值,則需要返回語句return。return語句的一般形式是 return 表示式 執行時,先計算出括號中表示式的值,再將該值返回給主調函式中的呼叫表示式。下面對return語句做一些說明 1 函式的返回值是通過函式中的 return 語句獲得的。return 語句將被呼叫函式中的一個...

c什麼是值型別什麼是引用型別,c 中什麼是值型別什麼是引用型別

一 資料型別在它自己的記憶體分配中儲存資料,則該資料型別就是 值型別 值型別包括 1 所有數字資料型別 2 boolean char和date 3 所有結構,即使其成員是引用型別 4 列舉,因為其基礎型別總是sbyte short integer long byte ushort uinteger或...