賦值語句與賦值表達式的區別
賦值語句是由賦值表達式再加上分號構成的表達式語句。 其一般形式為: 變量=表達式; 賦值語句的功能和特點都與賦值表達式相同。 它是程序中使用最多的語句之一。 在賦值語句的使用中需要注意以下幾點:
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;
……