我是使用Dev C++編譯

int main(int argc, char *argv[]) {
int a,b,c,d;
a=32;
b=(a++)*((++a)+(a++));
a=32;
c=((a++)+(++a))*(a++);
a=32;
d=(a++)+(a++)+(++a);
cout<<b<<endl;
cout<<c<<endl;
cout<<d;
return 0;
}


出來結果為
2178
2178
97


由答案推回原題目
b的結果似乎是33*(33+33)
c=(33+33)*33
d=32+32+33

想請問為什麼a++有32跟33兩種情況?

謝謝
C語言並沒有規定在多個++的情況下,要先做哪一個
造成有時候是++a先做,之後a++就變成33
有時候是a++先做,所以就還是32
而就算在這個編譯器湊出正確的寫法,在另一個編譯器也不見得會一樣
所以最好的方法就是不要在一條式子裡面用兩次以上的++
你這個問題蠻有趣的,我剛剛寫了一個程式來試跑
出現的結果跟你不一樣,所以結論是這種用法並不具有可移殖性。
大家可以把下面的code拿去跑跑看,看結果是否一樣。


#include <iostream>
// print
int p(int i, int j)
{
std::cout << j << "\'s item is " << i << '\n' ;
return i;
};
//print result
void pr(char c, int i)
{
std::cout << c << " = " << i << '\n' ;
};
int main()
{
int a,b,c,d ;
a=32;
b=p(a++,1)*(p(++a,2)+p(a++,3));
a=32;
c=(p(a++,1)+p(++a,2))*p(a++,3);
a=32;
d=p(a++,1)+p(a++,2)+p(++a,3);
pr('b',b);
pr('c',c);
pr('d',d);
return 0;
};



result :
1's item is 32
2's item is 34
3's item is 34
1's item is 32
2's item is 34
3's item is 34
1's item is 32
2's item is 33
3's item is 35
b = 2176
c = 2244
d = 100
我用Dev C++跑
結果跟你的一樣
應徵某公司
就考類似遞增這種題目
考的頭好大
其實我比較好奇的是正常人會這樣寫程式嗎@@
與其考這個不如把專案規劃那些比較重要的東西搞好吧@@大架構跟小細節的速度比起來,前者出了問題會比較嚴重吧@@

我跑出來的結果也是:
2178
2178
97

VC++ 2010
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!