• 关于自加++,左值的问题


    先给出结论:

    i++ = 5;    错

    ++i = 5;    对

    原因为何:i++的运算结果并不是i这个变量的引用,而是一个临时变量,其值为i的值,所以你无法进行以下运算:  
      i++=5;   甚至编译器不允许你对一个临时变量重新赋值,上面的表达式会引起编译错误   。

    左值,说得通俗一点,就是可以出现在表达式左边的值(等号左边),可以被改变。  
      a   =   5;  
      a是左值。  
      不能被改变的值不是左值,常量像5,'a',"abc123"这种都不能做左值。  
      自加/减运算符的操作数如果不是左值就不能自加和减。  
      但i++的操作就不能作左值,它返回一个临时变量。++i可以是左值,它返回i被加1后的自己。a   =   (i++)   *   5   ;  
      ==>   temp   =   i;  
              i   =   i   +   1;  
              a   =   temp   +   5;  
      a   =   (++i)   *   5;  
      ==>   i   =   i   +   1;  
              a   =   i   *   5;  
      temp没有在你的程序中出现,那是编译器自动做的,你不能给temp赋值。

    笔试碰到一题目:

    1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
    int a = 4;
    (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
    a = ?
    答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
    改后答案依次为9,10,10,11

    因为对此题目含糊不清,导致错选c,做个记号。

  • 相关阅读:
    构建之法(一)
    大二下周总结十四
    寒假学习报告03
    寒假学习报告02
    2019春季学期个人总结
    2019春学习进度报告(第十六周)
    计算英语最长单词连
    2019春学习进度报告(第十五周)
    用户体验评价
    2019春学习进度报告(第十四周)
  • 原文地址:https://www.cnblogs.com/8586/p/1499805.html
Copyright © 2020-2023  润新知