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 展开
#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 展开
1个回答
展开全部
i++是后+1,++i是先+1,多个参数的压栈顺序是从最后一个开始的因此,
上边输出的结果是第一行先++i,输出就是2,后边是I++,因此还是2;
第二行,先是i++,输出就是1,之后++i,输出就是2;
第三行,先是i++,输出就是1,之后还是i++,输出还是1,
但是本次取数完毕后,i已经经历了2次+1变成了3了,因此第四行输出的就是3
上边输出的结果是第一行先++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的问题,先是运算前,后是运算后。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询