瀏覽單個文章
傳說
Amateur Member
 

加入日期: Jun 2002
您的住址: 太陽系
文章: 32
基本上我覺得同學B只是在湊答案或是敷衍你...
正常來說答案應該是8....
不過問題的核心就在於「X++的結果是否有寫回記憶體中」
如果「有」則答案會是8
如果「沒有」則答案會是7
取決於Compiler怎麼編譯的...
如果L+(X++);被編譯後成為:
X=X+1;
ans=L+X;
那答案應該會是8...因為X++的計算結果已被回寫至記憶體

如果L+(X++);被編譯後成為:
ans=L+X+1;
那答案應該會是7...因為X++計算結果並沒有回寫至記憶體

PS.以上編譯後的程式為方便理解的舉例...實際結果請參考編譯器的編譯結果

引用:
作者m5a8258
92年 交大科管所 碩士考題..

先不管那個K=K+1囉
我比較好奇的是
這行印出ans=Q(L); printf("%3d%3d%3d\n",ans,K,L);
而是使用call by reference的下面程式碼
long Q(long& X){
long K; L=X+1; K=K+1
return L+(X++);
同學A說: X的記憶體空間應該跟L使用相同一個
而(X++)先被執行..所以X+1之後把值回寫到記憶體中.
但因為X與L使用相同記憶體空間.所以L+X=8.回傳給ans=8
同學B說: L先取得L=X+1的值.因此L的空間裡面的值為2+1=3
然後在執行X++.此時X與L使用相同記憶體空間.因此X=4
所以L+X為7
究竟是哪個正確呢?????
__________________
PCDVD站長:擋廣吿的後果就是導致免費網站無以為繼!
在你享受自由網路的同時
自私的行為只會扼殺這個環境。
舊 2005-11-19, 01:05 PM #13
回應時引用此文章
傳說離線中