[C] (++a)*(a++)+(++a)的值是多少?
来源:互联网 发布:apache ant 1.9.4安装 编辑:程序博客网 时间:2024/04/29 18:28
杨开城《白话C语言》P81:
int a,b;a = 1;b = (++a)*(a++)+(++a);书中原话是这样的:“由于上面对b的赋值语句中存在着3次对a的自增运算,其中有2次是左侧自增,a的初始值是1,因此先对a自增2次,a的值变为3,接着进行乘法和加法运算,b的值将是12。”
一看这话就感觉分析得太想当然了吧,VC6.0一试,b的值是7,果然不对,再用VS2005一试,b值为12。
你想老半天其计算顺序,终究还是依赖于编译器的,究其原因不过是C标准没有定义子表达式(++a)*(a++)和(++a)的计算顺序(“C将这个选择权留给实现者,这是因为可能一种选择在一种硬件上效率更高,而另一种选择在另一种硬件上效率更高。”——《C Primer Plus(第五版)》;“之所以未作定义,是想让编译器充分利用自身架构的特点,或者充分利用存储于寄存器中的值。”——《C专家编程》),真正写程序中根本不该出现这样有歧义的式子。
说白了研究这种计算题没有意义╮(╯▽╰)╭
0 0
- [C] (++a)*(a++)+(++a)的值是多少?
- C/C++ strlen(a)的值是多少
- Strlen(a) 的值 是多少
- C++: A a() 和 A a 的区别。
- [c/c++]A a();与A a;
- $a = 1; $c = ++$a+(++$a)+($a--)-($a++); echo $c;是怎么运算的
- if(a < num && b-- == 0) 中b的值是多少
- C语言-数组a[]:a与&a的不同
- A-C
- a
- a
- a
- a
- a
- a
- a
- a
- a
- onvif 开发文档【2】
- 西班牙式软件团队
- 第三方软件许可证说明
- ArcGIS支持的常用数据类型
- 二叉树最大深度最小深度之微妙区别
- [C] (++a)*(a++)+(++a)的值是多少?
- android asmack 注册 登陆 聊天 多人聊天室 文件传输
- JSP指令元素
- 使用Percona XtraBackup对MySQL进行在线热备份
- 如何让图片尺寸按照比例自适应屏幕大小
- c/c++调用MySql的存储过程
- iOS7官方推荐图标和图像尺寸
- libusb 打印ubs信息
- acdreamoj 瑶瑶饿了 完全背包