自增自减与赋值运算
首先我们来看一下赋值运算符的使用,请看下面的代码和输出结果。
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int a=2,b=7; 6 b+=++a; 7 printf("a=%d,b=%d",a,b); 8 return 0; 9 }
输出结果如下:
a=3,b=10
如果仅仅是一个等于号进行赋值,那么把右边表达式的值提取出来存放到等号左边对应的存储空间(一般就是存给一个变量)。
如果是类似于+=这种形式,例如a+=3,就相当于是a=a+3。
然后我们来看一下自增运算符(因为自减运算符同理,所以本文不再阐述)。
如果是a++这种形式,那么就是先把a变量的值传出来使用然后再自增,也就是a++这个表达式的值是原先a的值,且a++只能成为一个表达式了,不能当变量来用,即不能对a++进行赋值,不能a++=2。
如果是++a这种形式,那么就是先将a变量自增,再传出自增后的值,也就是++a这个表达式的值是自增后a的值,且++a不仅可以是表达式,也可以当变量来用,相当于是变量a,可以对++a进行赋值,即++a=5,是有效的。(本人之前理解错误,应该是只能对a赋值,不能对++a、a+=1、a=2等赋值,但是这些都能代表变量a的值)
所以说下面请看几个例子,分别是含有b=a++,a=a++,a+=++a,a+=a++的代码(在一个C语言程序里同时含有以上内容)。
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int a=2,b=a++; 6 printf("(1)a=%d,b=%d\n",a,b); 7 a=a++; 8 b+=++b; 9 printf("(2)a=%d,b=%d\n",a,b); 10 a+=a+++(a+=++a); 11 b+=(b+=++b)+(++b); 12 printf("(3)a=%d,b=%d\n",a,b); 13 return 0; 14 }
运行结果如下:
(1)a=3,b=2 (2)a=4,b=6 (3)a=31,b=45
Note:本人不建议初学者研究第三行的输出结果。
为了方便读者理解,本人写出了等效代码如下(输出结果是一样的):
1 #include<stdio.h> 2 3 int main(void) 4 { 5 int a=2,b=a; 6 a++; 7 printf("(1)a=%d,b=%d\n",a,b); 8 a=a,a++; 9 b=b+1,b+=b; 10 printf("(2)a=%d,b=%d\n",a,b); 11 a+=++a; 12 a+=(a++)+(a);//a+=a+a,a++; 13 b+=++b; 14 b+=(b)+(++b);//++b,b+=b+b; 15 printf("(3)a=%d,b=%d\n",a,b); 16 return 0; 17 }
注释相当于是对等效代码的这一行代码再次化简。
posted on 2020-02-11 20:57 Leisureeen 阅读(981) 评论(0) 编辑 收藏 举报