#include<stdio.h>
int main()
{
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
printf("%d\n",i++);
printf("%d\n",i--);
printf("%d\n",-i++);
printf("%d\n",-i--);
return 0;
}
答案是:
9,8,8,9,-8,-9
而
#include<stdio.h>
int main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
return 0;
}
答案是:
8,7,8,8,-8,-8
两个就是结构不一样,为什么答案也不一样呢?
这个问题其实很简单,c语言默认采用_cdecl的函数调用方式,这种方式规定参数从右往左入栈,即第二段代码中
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);参数入栈顺序依次是:
与_cdecl相对应的是__stdcall,参数从左往右入栈.还有一些其他的调用方式就不一一列举了.
追问对了,有一个疑问,是不是第一个的i值一直是变化的;
第二个的i值一直不变,在i=8的情况下进行操作
第二个的i值也是在变的,前加加和前减减都要变,后++/--不变.