[問題] 不了解間接取值的順序

看板C_and_CPP (C/C++)作者 (鴨舞九天)時間14年前 (2012/02/28 01:20), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/1
程式碼(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

02/28 01:21, , 1F
不會有同時執行這種事,一定是一先一後
02/28 01:21, 1F

02/28 01:22, , 2F
這個程式應該有踩到置底十三戒的第八
02/28 01:22, 2F

02/28 01:55, , 3F
我怎麼一直算 C=41 d=86 不曉得哪邊算錯
02/28 01:55, 3F

02/28 02:17, , 4F
s1和s2的優先順序並沒有規定,編譯器可以任意實做
02/28 02:17, 4F

02/28 02:18, , 5F
也可以在最佳化時做先後調整
02/28 02:18, 5F

02/28 02:21, , 6F
這個寫法的期望會仰賴在編譯器實做,就是不應該的寫法
02/28 02:21, 6F

02/28 03:05, , 7F
這一個thread文章在討論相同的問題 #18tImojl
02/28 03:05, 7F
文章代碼(AID): #1FIxj5iM (C_and_CPP)
文章代碼(AID): #1FIxj5iM (C_and_CPP)