看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) windows - ideone.com 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC !? 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) No 問題(Question): 想比對 ++*p, *p++, 以及*p之間的數值..但是若同時在printf印出 卻發現順序對調,值就不一致.. 但是若只是單純變數 (int i=5;) 卻不會有此問題 餵入的資料(Input): int a[] = {10, 20, 35}; int *p = a; 預期的正確結果(Expected Output): *p 以及 ++*p 值應該要一樣 錯誤結果(Wrong Output): printf內順序放錯 就有不同結果 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) #include <stdio.h> //後面標註為實際output int main(void) { int a[] = {10, 20, 35}; int *p = a; int v; int i = 5; printf("i = %d, i++ = %d\n", i, i++); //6, 5 i = 5; printf("i++ = %d, i = %d\n", i++, i); //5, 6 i = 5; printf("i = %d, ++i = %d\n", i, ++i); //6, 6 i = 5; printf("++i = %d, i = %d\n", ++i, i); //6, 6 //++*p printf("*p = %d, ++*p = %d\n", *p, ++*p); //11, 11 printf("*p = %d\n", *p); //11 a[0]=10; //p放在後面反而不是先+1之後的值 printf("++*p = %d, *p = %d\n", ++*p, *p); //11, 10 --- printf("*p = %d\n", *p); //11 //*p++ a[0]=10; p = &a[0]; printf("*p = %d, *p++ = %d\n", *p, *p++); //20, 10 printf("*p = %d\n", *p); //20 a[0]=10; p = &a[0]; printf("*p++ = %d, *p = %d\n", *p++, *p); //10, 10 --- printf("*p = %d\n", *p); //20 return 0; } 補充說明: 請問這跟不同的compiler 會有不同的結果嗎.?! 還是...!? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.182.130 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1597660230.A.45C.html
james732: 看一下置底文的「C/C++ 語言新手十三誡」 08/17 18:33
Joeng: 了解, 多謝...我先去精華區找看看..文章沒法刪除..抱歉. 08/17 18:36
nickchen1202: 板規有說不得自刪,所以留著比較好喔 08/17 20:49
loveme00835: 你可能是運氣比較不好 :'( 08/17 21:48
kyfish: 會出錯絕對是運氣好 如果沒發現錯誤而把未定義行為當規則 08/30 16:32
kyfish: 才是運氣不好 08/30 16:32
jack82822005: 是第八誡嗎? 09/11 14:11