zoukankan      html  css  js  c++  java
  • i++与++i

    i++和++i命令的区别有:
    1、赋值顺序不同
    ++ i 是先加后赋值;i ++ 是先赋值后加;++i和i++都是分两步完成的。
    因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。
    形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
    2、效率不同
    比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。
    3、 i++ 不能作为左值,而++i 可以。
    左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
    但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
    比如:
    int i = 0;
    int *p1 = &(++i);//正确
    int *p2 = &(i++);//错误
    ++i = 1;//正确
    i++ = 1;//错误
    扩展资料:
    当i=5时,s=(++i)+(++i)和s=(i++)+(i++)的值:
    1、当i=5时,s=(++i)+(++i)=13 先算第一个(++i),++在前面,就把i先加1再把赋值,即先把i变为6然后再得出(++i)的值为6,这时i已经变为6了,
    再计算第二个(++i),++在前面也是先把i加1后再赋值,不过这时的i已经为6了,第一步的时候把i变成6了的,然后加1的话就变成7了,所以第二个(++i)的值为7,s=(++i)+(++i)=6+7=13。
    2、s=(i++)+(i++)=11 先算第一个(i++),i在前面,就先赋值再把i加1,即(i++)的值为5,i的值变为6,第二个(i++),i在前面,先赋值再把i加1,这个时候的i已经为6了,即(i++)的值为6,而i已经变为7了。所以s=(i++)+(i++)=5+6=11。

  • 相关阅读:
    Tomcat+Nginx+Linux+Mysql部署豆瓣TOP250的项目到腾讯云服务器
    使用JSP+Servlet+Jdbc+Echatrs实现对豆瓣电影Top250的展示
    环境搭建-CentOS集群搭建
    环境搭建-Hadoop集群搭建
    ELK搭建实时日志分析平台
    Flume和Kafka完成实时数据的采集
    Python日志产生器
    腐竹木耳炒肉
    [转]Apple耳机兼容非Mac设置
    文件及文件夹操作
  • 原文地址:https://www.cnblogs.com/zyj66/p/13617182.html
Copyright © 2011-2022 走看看