C语言printf函数压栈问题

#include<stdio.h>#include<stdlib.h>voidmain(){inti=1;printf("%d,%d\n",i++,++i);i=1;pr... #include <stdio.h>
#include <stdlib.h>
void main()
{
int i=1;
printf("%d,%d\n",i++,++i);
i=1;
printf("%d,%d\n",++i,i++);
i=1;
printf("%d,%d\n",i++,i++);
printf("%d\n",i);

system("pause");
}

输出如下,求解释!
特别是上面是1,1
下面为什么又输出了3
展开
 我来答
ehzt2009
2015-04-08 · TA获得超过140个赞
知道小有建树答主
回答量:248
采纳率:25%
帮助的人:72.3万
展开全部
i++是后+1,++i是先+1,多个参数的压栈顺序是从最后一个开始的因此,
上边输出的结果是第一行先++i,输出就是2,后边是I++,因此还是2;
第二行,先是i++,输出就是1,之后++i,输出就是2;

第三行,先是i++,输出就是1,之后还是i++,输出还是1,
但是本次取数完毕后,i已经经历了2次+1变成了3了,因此第四行输出的就是3
更多追问追答
追问
是不是说每次进行压栈时,只是针对i的值,并不是计算后的i的值。
例如第二列先压i++,压完之后i的值并没有改变,因此输出1,然后在进行++i的压栈,此时i的值仍是1(这点不是很清楚),这个是先计算出i的值在进行压栈,也就是i+1之后的值。
追答
不是这个是i++和++i的区别问题,可以这样理解,一个运算周期i++是在运算后才加的1,运算中没有变,而++i是一上来就加的1,运算中已经加上了。这就是先加1和后加1的问题,先是运算前,后是运算后。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式