a++ 和 ++a 的区别

1)首先说左值和右值的定义:
        变量和文字常量都有存储区,并且有相关的类型。区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联:
                1).它的数据值,存储在某个内存地址中。有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read value)。文字常量和变量都可被用作右值
                2).它的地址值——即存储数据值的那块内存的地址。它有时被称为变量的左值(lvalue,读作ell-value)。我们也可认为左值的意思是位置值(location value)。文字常量不能被用作左值

(2) 首先对于a++的实现是:
        int temp;
        temp = a;
        a   = a+1;
        return temp;  // 返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用 ,也就是说你不能通过地址对temp进行操作.(换句话说就是不能作为左值),因为temp是一个临时变量。

而++a的实现是:
        a = a+1;
        return a;  // 返回值就是a

所以 a++ = 5 是错误的。而 ++a = 5 是正确的。

a++和++a在做左值的时候有不同,那么左值它首先必须是有特定地址的才能作为左值,否则赋值就没有具体对象。
a++的意思是先复制一份临时数据出来参与周边环境的运算,再自加变量a,可见a++用来参与运算的是一份复制出来的临时数据,这个数据是临时存在而没有固定地址的,不是一个真正的变量。
++a的意思是先自加变量a,再将变量放到周边环境参与运算,那么++a用来参与运算的是有具体地址的变量,所以++a是可以作为左值使用的。
在具体一点可以理解为:
a++返回一个临时变量
++a返回变量的引用

a++,a自增1,返回a自增之前的值(右值)
++a,a自增1,返回自增之后的a(左值)
你需要自己明确三个概念:表达式的返回值、左值、右值

最新文章

  1. img图片自适应div盒子,前提是不要把盒子的高给写死了,就是不要写高,如下
  2. Linux的学习--配置LNMP环境
  3. Spring学习之第一个hello world程序
  4. wechat开发
  5. 注释(Annotation)
  6. RST_n的问题
  7. java 命令对象简单学习实现:
  8. 关于Masonry框架(AutoLayout)的用法--面向初学者
  9. Intent、Bundle——实现Activity之间的通信
  10. Spring AOP拦截对Controller的请求时的配置失败
  11. api-gateway实践(06)新服务网关 - 请求监控
  12. 006_理解inode
  13. 17秋 软件工程 团队第五次作业 Alpha 测试报告
  14. Fibonacci Modified
  15. Java 6- Java 运算符
  16. LG1955 [NOI2015]程序自动分析
  17. Polya
  18. ubuntu获取root权限
  19. Elasticsearch、MongoDB、Hadoop适用场景
  20. Maximum call stack size exceeded

热门文章

  1. 建表/修改表名/增加删除字段(MySql)
  2. CentOS 6.5关闭防火墙
  3. javaweb总结(四十)——编写自己的JDBC框架
  4. Python range() 函数用法
  5. Unity Lighting - Emissive Materials 自发光材质(九)
  6. 人脸辨识,用树莓派Raspberry Pi实现舵机云台追踪脸孔
  7. HDU-6315:Naive Operations(线段树+思维)
  8. 【坚持】Selenium+Python学习之从读懂代码开始 DAY1
  9. scikit-learn 0.18中的cross_validation模块被移除
  10. 【转载】windows安装python2.7后的注册表问题