自增++与自减--运算符如何使用?

2023-05-16

在程序编程中,加1和减1是数值变量最常见的操作。因此自增++ 与自减-- 运算符的使用,也是我们需要掌握的。下面就一起看下这个运算符的使用吧

1. ++与–运算符的操作数必须是变量,变量的类型不限

因为++、–运算符会改变操作数本身的值,所以这里的操作数不能是一个常量(无法改变)。即i++可以但3++就是一条非法语句。
例如 :
int a1=3; a1++; ==> 此时a1的值是4
int a2=3; a2--; ==> 此时a2的值是2
在这里插入图片描述
3++;是一条非法语句
在这里插入图片描述
代码示例:

#include <stdio.h>
#include <math.h>
int main()
{
  int a1 = 3,a2 = 3,b = 0 ;
  //b = 3++;
  a1++;
  a2--;
  printf("a1的值是%d\n",a1);
  printf("a2的值是%d\n",a2);
  printf("b的值是%d\n",b);
   return 0;
}

2. i++与++i即运算符与变量的位置不同时,对变量来说都是+1操作,但放在表达式里会有不一样的结果

自增++ 和自减-- 的用法分两种情况:

例如:前缀形式:++i;- -i(在表达式里使用改变后的值)
后缀形式:i++;i- -(在表达式里使用改变后的值)

以上两种形式使变量本身的值改变是一样的,但是对使用它们的表达式会产生不一样的结果,在下面的示例里可以清晰的看到区别。
在这里插入图片描述
代码示例:

#include <stdio.h>
#include <math.h>
int main()
{
  int a = 20,b = 20,m = 0,n = 0;
  m = 2*a++;
  n = 2*++b;
	
   printf("m的值是%d,a此时是%d\n",m,a);
   printf("n的值是%d,b此时是%d\n",n,b);
   return 0;
}

3.运算符的使用场景

有时运算符使用在循环语句的条件表达式中可以带来更多的便捷,但要注意看清表达式是前缀或者后缀形式,因为它会影响当前的循环次数。可以结合下面的示例进行理解。

  • 我们将自增/自减运算符用于for的判断条件时,如果使用for(i;i<n;i++)或者for(i;i<n;++i)形式作为判断条件,那么循环的次数与for(i;i++<n;)形式是没有差异的;如果使用for(i;++i<n;)形式,那么循环次数就会少一次。
  • 我们将自增/自减运算符用于while的判断条件时,如果使用while(j<n){...j++;}的形式或者while(j<n){...++j;}的形式作为判断条件,那么循环的次数与while(j++<n){...}的形式是没有差异的;如果使用while(++j<n){...}的形式,那么循环次数就会少一次。
    在这里插入图片描述
    代码示例:
#include <stdio.h>
int main()
{
  int i1 = 0 ,i2 = 0,j1 = 0 ,j2 = 0;
  for(;i1<3;i1++)
 {
	 printf("这是i1变量的循环\n");
  }
  printf("\n");
  for(;++i2<3;)
  {
	 printf("这是i2变量的循环\n");
  }	
  printf("\n");
  while(j1++<3)
  {
	  printf("这是j1变量的循环\n");
  }
  printf("\n");
  while(++j2<3)
  {
	  printf("这是j2变量的循环\n");
  }
   return 0;
}


4.其他应用

尽管我们了解了变量自增与自减运算符的用法,但我不建议在其他条件表达式里使用自增/自减运算符,这不仅会使代码变的难懂,还有可能产生其他bug。
并且要分清形式很容易,但是使用时可能就会迷糊或者用错。除了写代码的时候细心一点,另一个建议就是将i=i+1与i分开写,即我用的时候只写i,需要加1的时候就+1再赋值。

例如:m=2a++;可以直接写成 m=2a;a=a+1
n=2*++b;可以直接写成 b=b+1;n=2*b

以上作法虽然使代码量增加了,但是可读性和容错性都更好了,何乐而不为呢??

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自增++与自减--运算符如何使用? 的相关文章

  • ubuntu16.04升级18.04(再次作死)

    继上次升级glibc版本作了一次大死后 xff0c 手又痒了 xff0c 又觉得我可以了 来继续升级ubuntu16 04升级到 ubuntu18 04 最主要的原因是ubuntu自带的python只到了3 5的版本 而我需要python3
  • 初始C语言——统计字符串中的字母,数字和其他符号 的个数

    define CRT SECURE NO WARNINGS 1 防止visual studio2013以上版本scanf报错 xff0c vc6 0环境可忽略 include lt stdio h gt int main int a 61
  • Linux下开发调试中大型C语言代码-如何提高效率

    背景 xff1a 在Linux下开发中大型C语言程序 xff08 包括编写 编译调试等步骤 xff09 时 xff0c 尤其大部分代码都是原创的情况下 以下的经验往往能提高调试效率 经验 xff1a xff08 1 xff09 Linux命
  • 《C语言中分配了动态内存后一定要释放吗?》

    问 xff1a 比如main函数里有一句 malloc 后面没有free 1 那么当main结束后 xff0c 动态分配的内存不会随之释放吗 xff1f 2 如果程序结束能自动释放 xff0c 那么还加上free xff08 xff09 x
  • Qemu使用心得

    使用Qemu的心得体会如下 xff1a xff08 1 xff09 在QEMU源码中增加自己的 c实现 xff0c 编译后出现很多个错误如 xff1a error storage class specified for parameter
  • 转载:malloc和free底层实现

    转载 xff1a malloc和free底层实现 内存管理内幕 Linux内存管理 xff1a Malloc 本文引用了下面这篇文章 xff0c 读完下面 xff0c 应该读下上面两篇文章 xff0c 其中 xff0c 内存管理内幕 提供了
  • qemu tcg代码执行流程

    转自 xff1a http blog csdn net alloc7 article details 7719823 一 qemu简介 qemu是使用动态二进制翻译的cpu模拟器 xff0c 它支持两种运行模式 xff1a 全系统模拟和用户
  • c语言如何调用c++(本文从qemu开发中总结)

    背景 xff1a 有时候一个工程中有c语言编写的代码 c xff0c 也有c 43 43 cpp 编写的 xff0c 分别用 xff43 语言编译器 xff08 这里指 xff47 xff43 xff43 xff09 和 xff43 xff
  • c++常错语法

    1 new T 代表创建一个T类的对象指针 xff0c new T 标识创建T类对象数组指针 2 template模板类只能把成员函数都定义在 h中 xff0c 分开 h和 cpp会报链接错误 3 类A 的成员变量包含B的对象B b xff
  • UEFI EDK2开发环境设置关键点/修改环境变量

    1 问题描述 Linux下当修改了已经编译过的EDK2工程顶层路径后 进入工程顶层路径source edksetup sh会报错 2 解决步骤 有一个隐藏问题非常容易被忽视 那就是EDK2工程的环境变量可能还是原来的旧的 这时候 1 进入工
  • linux静态库.a使用常见错误

    在linux中如果一个程序需要用到 a 有以下几点需要注意 1 如果x o与y o中用到了静态xx a中的函数 不能用gcc xx a o test x o y o这种方式编译 会提示那些函数undefined 正确的做法是gcc o te
  • C/C++多线程常见问题

    1 问题 1 1 创建线程后是否立马开始并行执行 答 主线程创建了子线程之后 后者并不是立即就开始运行了 至少在Linux操作系统下 1 子线程和主线程运行在一个core上 那还需要等待主线程交出core控制权 可能是时间片耗尽 2 子线程
  • 2020 年百度之星·程序设计大赛 - 初赛二 题解

    废话 丑话说在前头 xff0c T8我不会 xff08 没错是指我会出丑 xff09 T1 既然要玩尽可能多轮 xff0c 那么每轮投入的钱就要最少 xff0c 也就是 m m m 元 xff0c 那么可以算出每轮游戏会亏损
  • QEMU内存管理

    QEMU内存管理 1 QEMU中管理的Memory有 xff1a 普通的RAM MMIO 内存控制器 将物理内存动态的映射到不同的虚拟地址空间 2 QEMU的Memory是以一个MemoryRegin为节点组成的非循环图的形式组织的 叶子节
  • Matlab实现基于二维伽马函数的光照不均匀图像自适应校正算法

    Matlab程序 xff1a 基于二维伽马函数的光照不均匀图像自适应校正算法 clc close all tic im 61 imread 39 你的图片 jpg 39 figure imshow im title 39 原图 39 h s
  • SCI回复评审意见模板

    一般反馈回来修改时 xff0c 要给编辑重新写一封cover letter xff0c 表示尊重与感谢 xff0c 范文如下 句式大家可以依照自己的习惯表达修改 xff0c 多参考他人经验 xff09 Dear XX xff08 给你回信的
  • 毕业快乐 —— 写于2020年3月13日

    很久没有经营这个博客了 今天来写点什么罢 2020的春天 xff0c 由于猝不及防的疫情 xff0c 参加了一场特殊的毕业答辩 线上答辩形式 没有西装和鲜花 xff0c 似乎缺少了一些仪式感 但毕业似乎真真切切就是一件水到渠成的事情 xff
  • Mac连上WIFI但是无法上网的3种解决方案

    一般我们最先会认为是DNS问题 xff0c 你可以试下用ip访问一个服务器 xff08 网站 xff09 看下行不行 xff0c 如果也不行那就应该不是DNS的问题了 或者改变一下DNS xff0c 如114 xff0c 或者自己内网要求的
  • 简单粗暴理解支持向量机(SVM)及其MATLAB实例

    目录 SVM概述 SVM的改进 xff1a 解决回归拟合问题的SVR 多分类的SVM QP求解 SVM的MATLAB实现 xff1a Libsvm 实例 用SVM分类 实例 用SVM回归 SVM概述 SVM已经是非常流行 大家都有所耳闻的技

随机推荐