第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

突然發(fā)現(xiàn)自己離了電腦就不知道怎么算,為什么,我在死學嗎?

突然發(fā)現(xiàn)自己離了電腦就不知道怎么算,為什么,我在死學嗎?

#include<stdio.h> int main() { int x=3; int sum=0; sum=(++x)+(++x)+(--x); printf("%d\n",sum); } 這個代碼是如何算出14的,求過程。
查看完整描述

3 回答

已采納
?
onemoo

TA貢獻883條經(jīng)驗 獲得超454個贊

前面一個回答是有問題的,我在后面的留言中指出了錯誤所在。


首先說,像 (++x)+(++x)+(--x) 這樣連續(xù)使用自增減運算符的表達式是有問題的,這代碼的行為是未定義的,它得出 10 11 13 ... 什么的都有可能...

具體來說,造成問題的主要原因有兩點:

  1. 運算符的操作數(shù)的求值順序是不確定的。

    C標準沒有規(guī)定運算符操作數(shù)的求值順序,C標準只規(guī)定了運算符的運算順序結(jié)合性。

    比如表達式 a + b + c * d,根據(jù)運算符運算順序我們可以確定乘法運算符優(yōu)先于加法運算符,所以 c * d 先算;而加法運算符的結(jié)合性是從左到右,所以再算 a + b,隨后再加上 c * d 的結(jié)果。

    a b c d 這些就叫做運算符的操作數(shù),這幾個變量的具體的值是什么時候確定的呢? 這幾個操作數(shù)的求值順序是也按照運算順序來嗎?(先確定c和d的值,再確定a和b的值?) 答案是:不確定! 這幾個變量的值在運算前確定就可以了,具體是誰先誰后、在哪個時點都有可能。

    也許你會疑惑,a b c d這幾個變量的值在這個代碼中不是也不會變化嗎? 什么時候確定不都一樣嗎? ?也許是,但是不要忘了很多時候操作數(shù)不是簡單的變量,操作數(shù)也可能是其他的表達式或函數(shù)調(diào)用的返回值,這樣操作數(shù)求值順序的變化也許會導致操作數(shù)的值也不同(比如你題目中的表達式就是此例,詳解見下一條)。

  2. 自增減運算符是有副作用的(自增就是副作用),在你的這個表達式中,這三個副作用的發(fā)生時機也不確定!

    這里不明白的話,請看我在老問答區(qū)的一個回答?http://idcbgp.cn/qadetail/64864??

以上兩點結(jié)合起來就導致了這個表達是的值也是不確定的!

絕對不要再實踐中寫C標準中未定義行為的代碼!

查看完整回答
1 反對 回復 2017-03-17
  • 3 回答
  • 1 關注
  • 1265 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號