`
xitonga
  • 浏览: 579345 次
文章分类
社区版块
存档分类
最新评论

C语言中应该避免构造复杂的前缀后缀表达式

 
阅读更多

一个例子:

#include <stdio.h>
 
int main(){
    int i = 0;
    int a[] = {10,20,30};
 
    int r = 1 * a[i++] + 2 * a[i++] + 3 * a[i++];
    printf("%d\n", r);
    return 0;
}

结果是什么呢?


初学者半天想不明白;

半桶水的立刻答道:“哇,简单,1*10+2*20+3*30=140”

高手就考虑了C语言中算术运算符的结合顺序(从右到左),答案是“1*30+2*20+3*10=100”


当你用gcc编译后却惊奇的发现,答案是 60

C语言中,在一个算术运算过程中,i++会保持原值不变。但这是种不好的风格,最好的方法是在写程序过程中避免使用类似上面的复杂的前后缀表达式,尤其是与++运算结合在一起的表达式。


参考:http://blog.jobbole.com/53211/



分享到:
评论

相关推荐

    C语言程序设计标准教程

    在C语言中,构造类型有以下几种: ?数组类型 ?结构类型 ?联合类型 3.指针类型  指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    2.5.3 表达式中各类数值型数据间的混合运算 2.5.4 自增和自减运算符 2.5.5 强制类型转换运算符 2.6 赋值运算符与赋值表达式 2.6.1 赋值运算符 2.6.2 赋值过程中的类型转换 2.6.3 复合的赋值运算符 2.6.4 赋值表达式 ...

    C语言版数据结构与算法分析-严蔚敏经典视频教程

    03-003栈的应用:表达式求值、后缀表达式的表示 03-004队列的定义与存储、顺序队列、链式队列、循环队列 04-001串的定义、表示与实现 04-002串的模式匹配算法 04-003串的模式匹配算法的一种改进算法 05-001数组的...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    2.5.3 表达式中各类数值型数据间的混合运算 2.5.4 自增和自减运算符 2.5.5 强制类型转换运算符 2.6 赋值运算符与赋值表达式 2.6.1 赋值运算符 2.6.2 赋值过程中的类型转换 2.6.3 复合的赋值运算符 2.6.4 赋值表达式 ...

    数据结构课程设计

    数据结构课程设计,包含求字符串之间距离,后缀表达式计算,两个小游戏,二叉树结点染色问题,打印机任务队列,约瑟夫双向生死游戏,求解布尔表达式,谣言传播问题,分形问题,网络布线,数独游戏,中国邮路问题,...

    C++大学教程,一本适合初学者的入门教材(part1)

    9.9 在派生类中使用构造函数和析构函数 9.10 将派生类对象隐式转换为基类对象 9.11 关于继承的软件工程 9.12 复合与继承的比较 9.13 对象的“使用”关系和“知道”关系 9.14 实例研究:类Point、CircIe和...

    怎样计算命题公式的真值

    然后根据后缀形式,从叶结点开始构造相应的二叉树;最后按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值。 2.逻辑变元的标识符不限于单字母,而...

    编译原理全套

    10.1 C语言的编译系统 10.1.1 预处理器 10.1.2 汇编器 10.1.3 连接器 10.1.4 目标文件的格式 10.1.5 符号解析 10.1.6 静态库 10.1.7 可执行目标文件及装入 10.1.8 动态连接 10.1.9 处理目标文件的一些工具 ...

    [编译原理].陈意云.文字版

    10.1 c语言的编译系统 10.1.1 预处理器 10.1.2 汇编器 10.1.3 连接器 10.1.4 目标文件的格式 10.1.5 符号解析 10.1.6 静态库 10.1.7 可执行目标文件及装入 10.1.8 动态连接 10.1.9 处理目标文件...

    C++大学教程,一本适合初学者的入门教材(part2)

    9.9 在派生类中使用构造函数和析构函数 9.10 将派生类对象隐式转换为基类对象 9.11 关于继承的软件工程 9.12 复合与继承的比较 9.13 对象的“使用”关系和“知道”关系 9.14 实例研究:类Point、CircIe和...

    Java开发技术大全(500个源代码).

    compare.java 演示前缀、后缀自加之间区别的程序 constCharExample.java 演示转义字符 converseNumber.java 逆向输出数字 daffodilNumber.java 求水仙花数 division.java 演示整除结果 errorCompoundVariable....

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。 2.5 变量与常量 可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用...

Global site tag (gtag.js) - Google Analytics