博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自加自减运算符的错误使用和理解【个人学习笔记,如有错误欢迎指正】
阅读量:5301 次
发布时间:2019-06-14

本文共 890 字,大约阅读时间需要 2 分钟。

自加自减运算符的错误使用

int a = 1;printf("%d %d %d\n",a,a++,++a);

输出结果为:3 2 3

int a = 1;printf("%d ",a);printf("%d ",a++);printf("%d\n",++a);

输出结果为:1 1 3

由此可见,将多个自加自减运算符放入同一语句中是不合适的(不同编译器可能输出结果不同)。因为这是一种C语言中未定义的行为,即C语言并没有规定多个表达式的运算(求值)顺序,所以在不同编译器中得到的结果是不同的。故最好只在一条语句中只使用一次自加自减运算符。

另外,对常量(constant)使用自加自减运算符是不合法的,因为常量的值是不能改变的。假设X+Y=3,即便(X+Y)++后等于4,但由于(X+Y)++没有L-value,则结果还是无处可放。【自加自减运算符要求操作数(operant)必须具有L-value

自加自减过程的错误理解

b = a++; (1)

如这样一条语句,可能会错误的理解为先把a的值赋给b,然后a再自加。但这样的理解是错误的。最简单的一条证据就是++的运算符优先级(Operator Precedence)比赋值运算符要高。

对自加自减过程(后置)的正确理解

标准C规定,表达式a++的R-value是等于a的R-value。为了保存a++后的R-value,系统将自动生成一个临时变量暂存i的R-value。在执行完a=a+1后,返回保存在临时变量里的a的R-value作为a++的R-value,随即释放临时变量存储单元。因此对与语句(1)的执行过程相当于:

temp = a;a = a+1;return temp;b = temp

注意:赋值过程依然在a自加以后。

对自加自减过程(前置)的理解

类似于前者,标准C规定,表达式++a的R-value是等于a+1后的值,即先做a=a+1,然后再返回a+1的值。过程相当于

a = a+1;return a;

转载于:https://www.cnblogs.com/0x51696e/p/7448815.html

你可能感兴趣的文章
简单视频播放软件设计
查看>>
2019.1.22 工作日志
查看>>
Spring-AOP基础
查看>>
九度oj 题目1499:项目安排
查看>>
内置函数
查看>>
深度剖析collections模块
查看>>
BZOJ_1018_[SHOI2008]_交通堵塞traffic_(线段树)
查看>>
PyCharm Change Font Size
查看>>
理解Python中的__init__和__new__
查看>>
None.js 第六步 Stream(流)
查看>>
ajax:error:function (XMLHttpRequest, textStatus, errorThrown) 中status、readyState和textStatus状态意义...
查看>>
Day4 数据类型
查看>>
【转】Nicescroll滚动条插件的用法
查看>>
Redis复制与可扩展集群搭建(转)
查看>>
软件工程概论第六章--面向对象基础
查看>>
网络传输方式的分类
查看>>
思1-基本三观
查看>>
angularJS--apply() 和digest()方法
查看>>
Alpha 冲刺 (5/10)
查看>>
PHP函数之$_SERVER
查看>>