C语言程序printf中的运算是怎么样的???

请问各位大侠,为什么该程序输出的第一个i是7,第二个i是21,第三个又变成了5?有劳了,请详细点说明一下,谢谢~!!#include<stdio.h>voidmain()... 请问各位大侠,为什么该程序输出的第一个i是7,第二个i是21,第三个又变成了5?
有劳了,请详细点说明一下,谢谢~!!
#include <stdio.h>
void main()
{
int i=5;
printf("%d,%d,%d\n",i,(++i)+(++i)+(i++),i);
}
展开
 我来答
yql1990115
2010-10-02 · TA获得超过304个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:201万
展开全部

首先,我们要明确的一点是,c语言的输出方向是从右到左的

然后,我利用你的程序分别在vc6.0和win-tc中实验

得到的结果是vc6.0:7,21,5

           win-tc:8,20,5

通过结果可以看到,最右边都是输出5。

win-tc 8 8+7+5 5 = 8 20 5   <-

vc6.0  7 7+7+7 5 = 7 21 5   ->

通过资料查找,我们可以知道,

win-tc编译用的是指针 ,vc6.0用的是栈;

下面,我们重点讲一下vc6.0

因为用的是栈,所以

     第一次输出为5  

     第二次输出为21(原因:统一将i增值,在赋值给i,i=7,三次加即为21)

     第二次输出为7 (原因:i++这个要在输出完成后在加上去)

希望以上对你有帮助

2010年10月2日7:35:55

风若远去何人留
2015-10-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450136
专业C/C++软件开发

向TA提问 私信TA
展开全部
printf为C语言的标准输出函数,形式为:
int printf(char *format_str, ...);
这是一个不定长参数函数,在format_str(格式字符串)中可以指定输出格式符号,每个格式符号与后续的参数一一对应。
当运行时,会检查format_str, 如果不是格式化字符,会按照原样输出,遇到格式化字符时,会根据格式化字符,提取后续参数,并将其转为字符串形式,最终输出。

当操作正常时,返回实际输出的变量个数。
如果出错,返回负值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逸行天下ccy
2010-10-02
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
这个根据使用不同的编程工具而有所差异,你的编程软件应该是从右至左执行的,我用cfree编译时结果是8 21 5。 执行情况如下:首先输出最后的i,它的值就是初始值5。下面说一下(++i)+(++i)+(i++),第一++i和i++都是使i的值增一,但是++i是增加后在本表达式中立刻使用,而i++则是在下个表达式中才使用这次增加后的值,所以在两个i++式子就决定了i的值为7,而i++虽然使i的值变为8,但是在第二个式子中不使用,所以第二个式子中i变为了7,3个七相加为21。后面一个应该是8了。在这里你只需要记住i++和++i的基本用法就好,不要在类似(++i)+(++i)+(i++)费工夫,遇到这种可以多定义几个变量,如
{
int i=5,j,k,m;
k=++i;j=++i;m=i++;
printf("%d,%d,%d\n",i,(j+k+m),i);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yifanfeng93
2010-10-02 · TA获得超过147个赞
知道答主
回答量:129
采纳率:0%
帮助的人:0
展开全部
该问题涉及两方面:
1。 “i++”和“++i”的区别:两者都将i自加1, 但前者先使用再自加,后者先自加再使用;
2。函数参数的压栈顺序:标准C语言将函数参数由右至左压栈,对于上例,先入栈“i”(此时其值为5),其次为“(++i)+(++i)+(i++)”(即6+7+8=21),最后为i(7)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wxxlitianze
2010-10-18
知道答主
回答量:2
采纳率:0%
帮助的人:3291
展开全部
是因为一个++i和三个++i连加的运算规律不适用于两个++i连加.
另外,printf函数的运算输出是自右向左.
至于为什么两个 ++i 特殊,我也一直迷惑.
例如当i=3时,
当(++i)为1个时 i和y分别是 4,4
当(++i)为2个时 i和y分别是 5,10
当(++i)为3个时 i和y分别是 6,16
当(++i)为4个时 i和y分别是 7,23
当(++i)为5个时 i和y分别是 8,31
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式