看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) int main(void) { int a=12; double b=34.56; int *p1; double *p2; p1 = &a; p2 = &b; *p1 = 78; printf("%d%d",++a,*p1); system("pause"); return 0; } //------------(說明) 結果run出來是 7978 printf("%d%d",++a,*p1); 這行中,我會認為是++a先作 所以在print第一個值得的時候就很正確的印出79 但,p1是指向a的指標~為何取出的值卻是還沒有更改的78呢?? 希望得到的正確結果: 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev C++ 有問題的code: (請善用置底文標色功能) 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.125.81.125 ※ 編輯: likelihood 來自: 120.125.81.125 (03/02 15:45)
nowar100:undefined behavior 03/02 15:59
VictorTom:再說的更明確一點, function param(還是argu??)的 03/02 16:44
VictorTom:evaluation順序是compiler自行設計的, 沒有規定前面的 03/02 16:44
VictorTom:參數一定會先evaluate :) 03/02 16:45