2.6 赋值表达式
2.6.1 赋值运算符和赋值表达式
在C语言中,赋值号“=”是一个运算符,称为赋值运算符。由赋值运算符组成的表达式称为赋值表达式,其形式如下:
变量名=表达式
赋值号的左边必须是一个代表某一存储单元的变量名,对于初学者来说.只要记住赋值号左边必须是变量名即可。赋值号的右边必须是C语言中合法的表达式。赋值运算的功能是先求出右边表达式的值,然后把此值赋给赋值号左边的变量,确切地说,是把数据存入以该变量为标识的存储单元中去。例如,a和b都被定义成int类型变量:
a=10; /*把常量l0赋给变量a*/
b=a; /*把a中的值赋给变量b,a中的值不变*/
在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋的那个数据。
说明:
(1)赋值运算符的优先级别只高于逗号运算符,比任何其他运算符的优先级都低,且具有自右向左的结合性。因此,对于如下的表达式:
a=2+7/3
由于所有其他运算符的优先级都比赋值运算符高,所以先计算赋值运算符右边表达式的值,再把此值赋给变量a。(2)赋值运算符不同于数学中的“等于号”,这里不是等同的关系,而是进行“赋予”的操作。
(3)赋值表达式x=y的作用是,将变量y所代表的存储单元中的内容赋给变量x所代表的存储单元。x中原有的数据被替换掉。赋值后,变量y中的内容保持不变。此表达式应当读作“把右边变量的值赋给左边变量”,而不应读作“x等于y”。
(4)在赋值表达式x=x中,虽然赋值运算符两边的运算对象都是x,但出现在赋值号左边和右边的x具有不同的含义。赋值号右边的x表示变量x所代表的存储单元中的值。赋值号左边的x代表以x为标识的存储单元。该表达式的含义是取变量x中的值放到变量x中去。当然,这一操作并无实际意义。
表达式n=n+1也是合法的赋值表达式,其作用是取变量n中的值加1后再放回到变量n中,即使变量n中的值增1。
(5)赋值运算符的左侧只能是变量,不能是常量或表达式。a+b=c就是非法的赋值表达式。
(6)等号右边的表达式也可以是一个赋值表达式。如a=b=7+1,按照运算符的优先级,将首先计算出7+1的值8,然后按照赋值运算符自右向左的结合性,把8赋给变量b,最后再把变量b的值赋给变量a。而表达式a=7+1=b则是不合法的,因为在7+1=b中,在赋值号的左边不是一个变量。
(7)在C语言中,“=”号被视为一个运算符,a=19是一个表达式,而表达式应该有一个值,C语言规定最左边变量中所得到的新值就是赋值表达式的值。
(8)C语言的赋值表达式可以作为语句中的某个成分出现在众多的语句或表达式中,从而使变量中的数值变化过程变得难于掌握。因此要求读者在学习过程中建立正确的概念,才能准确掌握赋值表达式的运算规律。