作者ducksky (鴨舞九天)
站內C_and_CPP
標題[問題] 不了解間接取值的順序
時間Tue Feb 28 01:20:01 2012
程式碼(Code):(請善用置底文網頁, 記得排版)
int s1(int x,int *y){
x+=5;
*y*=2;
return *y+x;
}
int s2(int *x,int y){
*x+=5;
y*=2;
return *x+y;
}
void main(){
int a=3,b=5,c,d;
c=s1(a,&b)+s2(&a,b);//請問在這邊s1(a,&b)和s2(&a,b)是同時執行嗎?
帶入的值是(3,5)嗎?
d=s2(&a,b)+s1(a,&b);
}
最後輸出的結果是a=13 b=10 c=46 d=71
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.138.205
→ james732:不會有同時執行這種事,一定是一先一後 02/28 01:21
→ james732:這個程式應該有踩到置底十三戒的第八 02/28 01:22
→ ducksky:我怎麼一直算 C=41 d=86 不曉得哪邊算錯 02/28 01:55
推 iamstudent:s1和s2的優先順序並沒有規定,編譯器可以任意實做 02/28 02:17
→ iamstudent:也可以在最佳化時做先後調整 02/28 02:18
推 iamstudent:這個寫法的期望會仰賴在編譯器實做,就是不應該的寫法 02/28 02:21
→ fengchu:這一個thread文章在討論相同的問題 #18tImojl 02/28 03:05