1、左值和右值
左值,即能够出现在赋值符号左边的东西;它标识了一个可以存储结果值的地址。
右值,即能够出现在赋值符号右边的东西;它指定了一个值。
*p可以当作左值的原因:指针p的值是内存中某个特定的地址,*操作符使得机器指向那个位置。
2、++与--
#include<stdio.h>
int main()
{
int a = 1;
int b = 1;
int c;
c = (++a) + (a++) + (b *= a++) +(a *= 2) + (a *= a++);
printf("c = %d\n",c);
printf("b = %d\n",b);
printf("a = %d\n",a);
return 0;
}//endmain
|
1)、执行时,先分配临时内存,然后由于5个“()”,其计算顺序是从左向右,计算++a的值,返回增一后的a的地址,a的值为2。
2)、计算a++的值,返回临时内存的地址,a的值仍为2
3)、计算b *= a++中的a++,返回临时内存的地址,a的值仍为2。计算b *= a++中的“*=”,将a的值写入临时内存,计算得b的值为2,返回b的地址
4)、计算a *= 2的值,返回a的地址,a的值为4
5)、计算a *= a++中的a++,返回临时内存的地址,a的值仍为4。计算a *= a++中的“*=”,将a的值写入临时内存,返回a的地址,a的值为16
6)、计算剩下的“+”,为了进行计算,不同编译器结果不同。用gcc编译器编译后,c结果为:26即将个个表达式的值写入临时内存,得值2 + 2 + 2 + 4 + 16为26,写入c中。在其他编译环境没实验,读者可自行实验,看看结果
7)、计算三个a++欠下的加1,a最后变为19。
阅读(604) | 评论(0) | 转发(0) |