自增自减运算 ++ --
  EX74bkH1mmrD 2023年11月02日 36 0

自增自减运算

很多编程语言中都涉及到自增自减运算,即 ++、-- 。

以自增运算举例说明:++i 与 i++

  • 自增运算分为『前置自增』和『后置自增』,顾名思义,前置自增,『++』符号在变量前,即 ++i,后置自增,『++』符号在变量后,即 i++
  • 前置自增表示 先运算再自增,即 先运算表达式,再执行自增
  • 后置自增表示 先自增再运算,即 先执行自增,再运算表达式的值

++i 和 i++ 都可以实现变量 i 本身的加1运算,即 i = i + 1;。那前置自增和后置自增到底有什么异同呢?

相同点

  1. 针对变量 i 自身
  • 对于 变量 i 自身 来说,无论是前置自增还是后置自增,运算结果都是变量 i 的值加 1 。即经过 i++++i 之后,i 的值为 i + 1
  1. 针对表达式
  • 当表达式仅由变量i和自增运算符组成,而不涉及到别的变量和别的运算,即 i++;++i;,这种情况无论是前置还是后置,都没有区别。都表示 i = i + 1; 可以简写为 i += 1;
  • 需要说明一点,为了书写和感官整洁,这种情况习惯上使用“后置自增”,即 i++;。 例如:
int i = 1;
while (i <= 100) 
{
    cout << i << ' ';
    i++; //这里尽量使用后置自增
}

注意:第1条只针对变量来说,执行完自增之后,结果+1;第2条针对只包含i和自增运算符的表达式,有分号。 注意两种情况的区分。

不同点

  1. 后置自增表示 先运算表达式,整个表达式运算完成,再将变量i的值+1。 例如:
int i = 5;
int a = 10;
int sum = 0;

sum = i++ + a;

求:sum的值,i的值 结果:sum 为 15,a 为 6 执行顺序为:

① sum = i + a;  => 15 + 10  => 15   //先运算表达式
② i = i + 1;    => 5 + 1    => 6    //再自增
  1. 前置自增表示 变量i的值先+1,改变i的值之后再运算表达式。 例如:
int i = 5;
int a = 10;
int sum = 0;

sum = ++i + a;

求:sum的值,i的值 结果:sum 为 16,a 为 6 执行顺序为:

① i = i + 1;    => 5 + 1    => 6    //先自增
② sum = i + a;  => 6 + 10   => 16   //再运算表达式

补充说明

  1. 自增自减运算符只能用于变量,不能用于常量或表达式。
  2. 自增自减运算符的结合性是“自右向左”。(一般情况下,算术运算符的结合性是“自左向右”)
  3. 自增自减运算符常用语循环语句中,使循环变量(累加器)自动加1操作;也用于指针变量,使指针变量指向下一个内存地址。

小扩展

自增自减虽然语法简便,但可读性差,特别是用在复杂一点的表达式中,会额外增加阅读难度,所以在我们平时的开发中,尽量少用自增自减运算。准确一点说,在比较复杂的表达式中,如果使用自增自减运算,要配合小括号使用增加可读性,或者尽量避免使用。

因为自增(++)自减(--)运算其可读性差,在比较现代的高级程序设计语言中,已经废弃。 如Python、Kotlin中已经不再支持,Swift3.0开始,也已经不再支持。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月06日   50   0   0 #includecii++
  gBkHYLY8jvYd   2023年12月09日   30   0   0 cii++数据
  gBkHYLY8jvYd   2023年12月06日   24   0   0 cii++依赖关系
  gBkHYLY8jvYd   2023年11月19日   24   0   0 #includei++数据
  lh6O4DgR0ZQ8   2023年11月24日   18   0   0 cii++c++
  gBkHYLY8jvYd   2023年11月19日   21   0   0 i++测试数据数据
  gBkHYLY8jvYd   2023年11月22日   23   0   0 ioscii++
  gBkHYLY8jvYd   2023年12月10日   24   0   0 #include数组i++
  gBkHYLY8jvYd   2023年12月08日   21   0   0 #includecii++
  pv5yotLONGGI   2023年11月02日   43   0   0 Systemmathi++
  ezcY5UZFiUJ6   2023年11月02日   61   0   0 i++随机数最小值
  gBkHYLY8jvYd   2023年11月14日   33   0   0 #includei++升序
  kIM7GUNpnV3x   2023年11月02日   62   0   0 数组Systemi++
EX74bkH1mmrD