[問題] 請教 C/C++ 程式方面的問題...++*p...

作者: Joeng (癡情對誰不心傷)   2020-08-17 18:30:27
開發平台(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
作者: james732 (好人超)   2020-08-17 18:33:00
看一下置底文的「C/C++ 語言新手十三誡」
作者: Joeng (癡情對誰不心傷)   2020-08-17 18:36:00
了解, 多謝...我先去精華區找看看..文章沒法刪除..抱歉.
作者: nickchen1202 (Nickchen Nick)   2020-08-17 20:49:00
板規有說不得自刪,所以留著比較好喔
作者: loveme00835 (髮箍)   2020-08-17 21:48:00
你可能是運氣比較不好 :'(
作者: kyfish (fish)   2020-08-30 16:32:00
會出錯絕對是運氣好 如果沒發現錯誤而把未定義行為當規則才是運氣不好
作者: jack82822005 (小郭郭)   2020-09-11 14:11:00
是第八誡嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com