c语言问题,各位大佬帮帮忙哦,谢谢了

#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--);

参数入栈顺序依次是:

-i--;
-i++;
i--;
i++;
--i;
++i;

与_cdecl相对应的是__stdcall,参数从左往右入栈.还有一些其他的调用方式就不一一列举了.

追问

对了,有一个疑问,是不是第一个的i值一直是变化的;
第二个的i值一直不变,在i=8的情况下进行操作

追答

第二个的i值也是在变的,前加加和前减减都要变,后++/--不变.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-02-16
噩噩浑浑额好的哦等会电话都不几点回的会的呵呵