在程序编程中,加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
以上作法虽然使代码量增加了,但是可读性和容错性都更好了,何乐而不为呢??