赋值语句与赋值表达式的区别
赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为: 变量=表达式; 赋值语句的功能和特点都与赋值表达式相同。 它是程序中使用最多的语句之一。 在赋值语句的使用中需要注意以下几点:
1.由于在赋值符“=”右边的表达式也可以又是一个赋值表达式,因此,下述形式 变量=(变量=表达式); 是成立的,从而形成嵌套的情形。其展开之后的一般形式为: 变量=变量=…=表达式;
例如:
a=b=c=d=e=5;按照赋值运算符的右接合性,因此实际上等效于:
e=5;
d=e;
c=d;
b=c;
a=b;
2.注意在变量说明中给变量赋初值和赋值语句的区别。给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。
3.在变量说明中,不允许连续给多个变量赋初值。 如下述说明是错误的: int a=b=c=5 必须写为 int a=5,b=5,c=5; 而赋值语句允许连续赋值。
4.注意赋值表达式和赋值语句的区别。赋值表达式是一种表达式,它可以出现在任何允许表达式出现的地方,而赋值语句则不能。
在C语言赋值语句中,给多个变量赋值,用逗号隔开,岂不是相当于一
不能那样理解。逗号表达式是已经声明过的变量合法组成的多个有效运算表达式用逗号隔开,而int a=1,b=2;只能有一种解释,那就是声明和初始化变量时可以把多个相同类型的变量用逗号隔开写在同一个类型符后面,最后用分号结束。对上面的声明,如果再声明一个int c;,那么,c=(a=1,b=2)运算后c=2,因为(a=1,b=2)取最右边一个逗号后表达式的运算结果。所以,我觉得c=(a=1,b=2)中的(a=1,b=2)是逗号表达式,而int a=1,b=2不是逗号表达式!计算机语言的所谓“语法”其实只是一些书写规定,有很多甚至是不能变通的,比如char *p,*q,语法说*是属于char而不属于后面的变量的,但若写成char *p,q后q却不认为是指针,这又怎么理解呢?那就是为了方便,不然,如
char *p,w,x;这样的声明就要写成两行了:
char *p;
char w,x;
……