亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

希望能夠幫幫我,不難,很基礎

希望能夠幫幫我,不難,很基礎

C++ C
XAGT 2017-10-24 12:46:08
有如下:#include<stdio.h> main() { int j=3; printf("%d\n%d",++j,j++); printf("\n%d\n%d",j++,++j); } 为什么会输出5  3                          6  7 呢,这个是这样分的,按照++和--的,不是应该输出 吗                4  4                          4   5
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻883條經驗 獲得超454個贊

printf("%d\n%d",++j,j++);? 這樣的代碼的行為是“未定義的”

自增/減運算符構成的表達式,對操作數的自增/減算是表達式的“副作用”,這副作用并不保證和表達式求值同時發生

以你這個函數調用是參數求值為例。函數的兩個參數都是自增表達式。那么 ,是++j 先算還是 j++ 先算呢? 答案是:不確定!? 而且關鍵是這兩個自增表達式還是對同一個變量自增的,那么 ++j 中的 j 會在 j++ 之前自增嗎? 還是別的情況?? 答案也是:不確定!? 所以這句 printf 打印出什么都有可能。


像自增這樣有副作用的表達式,如果你不確定它的副作用的發生順序,那最好一句中只用一個這樣的表達式。

比如像 @xungeer29 說的那樣分開寫,就能得到確定的結果了。

查看完整回答
2 反對 回復 2017-10-24
?
xungeer29

TA貢獻46條經驗 獲得超20個贊

你輸出
printf("%d\n",++j);
printf("%d\n",j++);
printf("%d\n",j++);
printf("%d\n",++j);
試試,4457


查看完整回答
1 反對 回復 2017-10-24
  • XAGT
    XAGT
    合起來就輸出不行了嗎,像printf("%d\n%d",a,b); 這樣的可以輸出a,b的值,那個++合在一起輸出就不行
  • 2 回答
  • 0 關注
  • 2120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號