printf函数对参数的计算顺序,是从右往左的
来源:互联网 发布:网络体系架构 编辑:程序博客网 时间:2024/06/08 12:50
例:
- #include<stdio.h>
- void main()
- {
- int i=2;
- printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
- printf("%d\n",i);
- }
首先,应该说明的是在不同的编译环境中结果是不一样的。
关于本段代码在VC++6.0中的规则如下:
1、printf函数的执行顺序是由右到左的
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的!
所以:
printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
从右往左运算:
i++得到2(i=2,后加1在整条语句执行完才进行,这里先记下)
i还是2 (i=2,原因见上一行)
++i得到3(i=3,先加1,后使用)
i++得到3(i=3,后加1在整条语句执行完才进行,这里先记下)
所以输出结果为:3,3,2,2
然后计算刚才的两次后自增运算后,i=5
printf("%d\n",i);
所以,结果是5
-----------------------------------------------------------------------------------
关于下面的程序:
- #include <stdio.h>
- void main()
- {
- int a=5,b=2;
- printf("%d %d\n",b=a+1,a=a+1);
- }
输出结果是:7 6
而不是:6 6
这是因为printf函数的计算是从右向左进行的。
另外关于下面程序的解释:
int i=7; printf("%d\n", i++ * i++);
输出结果是:49而不是56
int i=7;printf("%d %d\n",++i,i++);
输出结果是:8 7而不是9,7 这并不违背分割新上面关于printf函数从右向左计算的原因。
总结:到这里,要掌握的是两点,
一是:printf函数中的计算是从右向左进行的。
二是:我们在写代码时,应该尽量避免类似下面的无确定意义的表达式出现,因为很有可能不同的编译器,会采用不同的理解方式。
例如:
a+=a++;
a[i]=i++;
printf("%d %d\n",++i,i++);
- printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的
- C printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的
- printf函数对参数的计算顺序,是从右往左的(输出是从左向右的)
- C语言 printf函数对参数的计算顺序自加自减的讨论
- C中printf计算参数是从右到左压栈的
- c 中printf计算参数时是从右到左压入栈的
- C中printf计算参数时是从右到左压栈的
- C中printf计算参数时是从右到左压栈的
- C中printf计算参数的顺序
- printf()函数的参数执行顺序
- printf 参数传递顺序是从右至左
- C语言printf计算参数时是从右向左压栈的
- 最新Eclipse配置Android开发环境SDK 并安装JellyBean 4.3的方法
- 关于main函数中的两个参数
- 字符编码 ansi, unicode, utf-8, utf-16
- KiKi's K-Number
- QT210烧写UBOOT到SD卡原理以及UBOOT启动
- printf函数对参数的计算顺序,是从右往左的
- 解决SWFUpload在Chrome、Firefox浏览器下session找不到的问题
- 为什么判断UITextField判断为空不能用isEqualToString:@""
- 简单的一些监听事件
- 青软实训.NET学习笔记(6)---委托
- 屏蔽鼠标右键
- URAL 1385 Interesting Number
- tomcat登录问题
- apt-get 和 dpkg 命令大全