int x = 1, y = 0;
printf("%d, x=%d, y=%d", x = y, x, y); // 輸出: 0, x=0, y=0
int swap(int *a, int *b) { int t=*a; *a=*b; *b=t; return 1; }
int main() {
int x=1, y=0;
printf("return of swap is %d\tx=%d,y=%d\n", swap(&x,&y), x, y); // 輸出: 1, x=1, y=0
printf("\t\t\tx=%d,y=%d", x, y); // 輸出: x=0, y=1
}
C 標準未規定函數參數求值順序,編譯器通常**從右向左**壓棧 (cdecl 調用約定)。
printf("...", swap(&x,&y), x, y):printf("x=%d,y=%d\tswap return %d\n", x, y, swap(&x,&y)); // 先壓 swap 返回值,再壓 x,y (此時已交換) → 顯示交換後值
int ret = swap(&x,&y);
printf("ret=%d, x=%d, y=%d", ret, x, y); // 順序明確,無歧義