C使用运算符(operator)来代表算数运算。包括=、+、*、、/、%。
赋值运算符“=”:
" ="是赋值运算符。i=2这条很简单语句该怎么念出来?这么多年我的已经工作好多年同事还是念为“i等于2”。i是一个变量,也就一个变量的存储空间。怎么会等于2呢?
正确的念法应该是“将2赋给变量i”。这种念法就准确的理解了“=”赋值运算符的含义。"="是从右往左执行的,
i=j=x=2;执行结果会怎样?我们来分析一下,将2赋给变量x,将x变量的值赋给j,将j的值赋给i。
最后的结果就是i、j、x存储的内容都是2.我们来看看在keil中以下代码是怎么执行的
#include
void main(void)
{
volatile char i,j,x;
i=1;
j=3;
x=4;
i=j=x=2;
}
翻译成汇编语言
2: void main(void)
3: {
4: volatile char i,j,x;
5:
6: i=1;
C:0x0003 750801 MOV 0x08,#0x01
7: j=3;
C:0x0006 750903 MOV 0x09,#0x03
8: x=4;
C:0x0009 750A04 MOV 0x0A,#0x04
9: i=j=x=2;
10:
11:
C:0x000C 750A02 MOV 0x0A,#0x02
C:0x000F 750902 MOV 0x09,#0x02
C:0x0012 750802 MOV 0x08,#0x02
12: }
C:0x0015 22 RET
分析以上代码:将0x01存入8号地址(i),
#0x03存入9号地址(j),
#0x04存入10号地址(x),
#0x02存入10号地址(x),
#0x02存入9号地址(j)。
#0x02存入8号地址(i)。
看看运行过程与我们分析的一样吗?绝对一样的。
另外,在C中我们一般将“=”符号左边成为“左值(left value)”,右边称为“右值(right value)”。
一般是可以修改的值可以做为左值,右值是可以赋给左值的变量。比如:
i=2;
i是左值,2是右值。大家想想2=i这条语句可以吗?在VC中试试看看能不能编译通过?
2是立即数,没有地址,怎么能接收 i 地址中的值?
没有那个函数或者程序不使用赋值语句,所以虽然很简单,我们还是有必要介绍一下。
文章评论(0条评论)
登录后参与讨论