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。

  • 相关阅读:
    [bbk2908]第4集 Chapter 03 介绍RAC的体系结构
    [bbk3011]第8集 Chapter 05 介绍RAC安装过程概述
    [bbk3100]第7集 Chapter 04 介绍RAC中CVU工具的使用
    [bbk2907]第3集 Chapter 02 RAC的安装过程中需要注意的要点
    [bbk2905]第1集 Chapter 01 介绍RAC概述
    [bbk2906]第2集 Chapter 02 介绍RAC概述
    RAC之CRS架构简介
    NOIP普及组2017比赛总结
    struct和typedef
    KMP详解(转)
  • 原文地址:https://www.cnblogs.com/zyj66/p/13617182.html
Copyright © 2011-2022 走看看