開發平台(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