為啥是22啊,我算的是21,搞不明白,求大佬

uj5u.com熱心網友回復:
未定義行為,不同編譯器,結果不一定相同uj5u.com熱心網友回復:
應該是這樣:先求值了運算式的一部分: (++a)+(++a) 不管前半段還是后半段都是如此兩個++運算子 導致兩次自增1再使用其值 所以7+7了
在第二部分求值中 前面的運算式(++a)+(++a) 已經出結果 所以不會被后面的一個++影響 14+8 == 22
uj5u.com熱心網友回復:
很多編譯系統規定,連續多個前綴式++和--運算子出現在同一個運算運算式中時,先將變數連續自加或自減N次,然后判定++a的值為a+N。 按照推測,輸出陳述句應當是這樣執行的:首先,掃描整條運算運算式q = (++a)+(++a)+(++a),發現有三處++的前綴式用法,于是,將a連續自加1三次,變為8,然后開始計算運算式,第一個括號是++a判定為8,第二個括號是++a判定值為8,第三個括號是++a判定值為8,最后,計算結果8+8+8=24。實驗如下:int main(int argc, char* argv[])
{
int a=5,q=0;
q = (++a)+(++a)+(++a);
printf("%d\n",a);
printf("%d\n",q);
system("pause");
return 0;
}

你這個等于22,還真沒想明白

uj5u.com熱心網友回復:
建議發一下編譯器規定的內容,沒看到過~
uj5u.com熱心網友回復:
運算式求值順序未定義,所以6+7+8、7+7+8、8+8+8都有可能uj5u.com熱心網友回復:
上頭啊,每個編譯器都不一樣
uj5u.com熱心網友回復:
很多編譯系統規定,連續多個前綴式++和--運算子出現在同一個運算運算式中時,先將變數連續自加或自減N次,然后判定++a的值為a+N。 按照推測,輸出陳述句應當是這樣執行的:首先,掃描整條運算運算式q = (++a)+(++a)+(++a),發現有三處++的前綴式用法,于是,將a連續自加1三次,變為8,然后開始計算運算式,第一個括號是++a判定為8,第二個括號是++a判定值為8,第三個括號是++a判定值為8,最后,計算結果8+8+8=24。實驗如下:
int main(int argc, char* argv[])
{
int a=5,q=0;
q = (++a)+(++a)+(++a);
printf("%d\n",a);
printf("%d\n",q);
system("pause");
return 0;
}
你這個等于22,還真沒想明白
建議發一下編譯器規定的內容,沒看到過~
上頭啊,每個編譯器都不一樣
“很多編譯系統規定,連續多個前綴式++和--運算子出現在同一個運算運算式中時,先將變數連續自加或自減N次,然后判定++a的值為a+N”
對于這句話沒見過,我的意思在哪里能找到。
我也知道多個++(自增)--(自減)有副作用,不同的編譯器計算結果不一樣。你的這句話意思大多數編譯器按照你說的方法處理,那么理論上大多數編譯器的結果應該是一樣的呢
uj5u.com熱心網友回復:
這其實沒什么好頭痛的,也沒什么好糾結的,實際應用中,碰到這種問題,你肯定不會去用。現在作為學習,去研究一下,試試驗一下,分析一下,加深對c陳述句理解,也未嘗不可。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/213054.html
標籤:新手樂園
