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);
} 展开
有劳了,请详细点说明一下,谢谢~!!
#include <stdio.h>
void main()
{
int i=5;
printf("%d,%d,%d\n",i,(++i)+(++i)+(i++),i);
} 展开
8个回答
展开全部
首先,我们要明确的一点是,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
展开全部
printf为C语言的标准输出函数,形式为:
int printf(char *format_str, ...);
这是一个不定长参数函数,在format_str(格式字符串)中可以指定输出格式符号,每个格式符号与后续的参数一一对应。
当运行时,会检查format_str, 如果不是格式化字符,会按照原样输出,遇到格式化字符时,会根据格式化字符,提取后续参数,并将其转为字符串形式,最终输出。
当操作正常时,返回实际输出的变量个数。
如果出错,返回负值。
int printf(char *format_str, ...);
这是一个不定长参数函数,在format_str(格式字符串)中可以指定输出格式符号,每个格式符号与后续的参数一一对应。
当运行时,会检查format_str, 如果不是格式化字符,会按照原样输出,遇到格式化字符时,会根据格式化字符,提取后续参数,并将其转为字符串形式,最终输出。
当操作正常时,返回实际输出的变量个数。
如果出错,返回负值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个根据使用不同的编程工具而有所差异,你的编程软件应该是从右至左执行的,我用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);
}
{
int i=5,j,k,m;
k=++i;j=++i;m=i++;
printf("%d,%d,%d\n",i,(j+k+m),i);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
该问题涉及两方面:
1。 “i++”和“++i”的区别:两者都将i自加1, 但前者先使用再自加,后者先自加再使用;
2。函数参数的压栈顺序:标准C语言将函数参数由右至左压栈,对于上例,先入栈“i”(此时其值为5),其次为“(++i)+(++i)+(i++)”(即6+7+8=21),最后为i(7)。
1。 “i++”和“++i”的区别:两者都将i自加1, 但前者先使用再自加,后者先自加再使用;
2。函数参数的压栈顺序:标准C语言将函数参数由右至左压栈,对于上例,先入栈“i”(此时其值为5),其次为“(++i)+(++i)+(i++)”(即6+7+8=21),最后为i(7)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是因为一个++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
另外,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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |