賦值運算子和賦值表示式

2021-06-17 15:41:37 字數 1491 閱讀 1173

1、賦值運算子

等於號「=」就是賦值運算子,它的作用是將乙個資料賦給乙個變數,也可以將乙個表示式的值賦給乙個變數。如,z=1 ; z=x+y; 。

2、復合的賦值運算子

在賦值運算子「=」之前加上其他運算子,可以構成復合的運算子。如:

a += 3; /*等價於a=a+3*/

a *= b+3; /*等價於a=a*(b+3)*/

a %= 3; /*等價於a=a%3*/

需要注意是上面第二行**,要把(b+3)看做乙個整體。

3、賦值表示式

由賦值運算子將乙個變數和乙個表示式連線起來的式子稱為賦值表示式。對賦值表示式的求解過程是:先求賦值運算子右側的表示式的值(稱為右值),然後賦給賦值運算子左側的變數(稱為左值)。乙個表示式應該有乙個值,例如,賦值表示式「a=1+2;」的值是3,執行表示式後,變數a的值也是3。

並不是任何物件都可以作為左值的,變數可以作為左值,而表示式a+b就不能作為左值,常變數也能作為左值,因為常變數不能被賦值。

左值可以出現在賦值運算子右側,如a=a+1; 。

賦值表示式中的右值,還可以是乙個賦值表示式,如a=(b=5); ,括號內的「b=5」是乙個賦值表示式,它的值等於5。執行a=(b=5);相當於執行b=5和a=b兩個賦值表示式,因此a的值等於5,b的值以及表示式的值都是5。因為賦值運算子按照「自右而左」的結合順序運算,所以,(b=5)的括號是可以省略的,即可寫成a=b=5。下面是一些賦值表示式的例子:

a=b=c=3;/*表示式的值為3,a,b,c的值也均為3*/

a=5+(b=6);/*表示式的值為11,a為11,b為6*/

a=(b=4)+(c=6);/*表示式的值10,a為10,b為4,c為6*/

a=(b=10)/(c=2);/*表示式的值為5,a為5,b為10,c為2*/

下面是乙個比較特殊的賦值表示式:

(a=3*5)=4*3;

對於上面的賦值表示式,將先執行括號裡的運算,將15賦給a,然後執行4*3的運算得到12,再將12賦值給a,最終a的值為12,整個表示式的值也為12。上面的**是將賦值表示式當作了左值,在對賦值表示式(a=3*5)求解後,變數a得到值15,此時賦值表示式(a=3*5)=4*3其實相當於(a)=4*3,而不是(15)=4*3,正因為這樣才使得賦值表示式能夠作為左值。

賦值表示式作為左值時應加括號,如果寫成下面的樣子就會出現語法錯誤:

a=3*5=4*3; /*語法錯誤*/

將賦值表示式作為表示式的一種,使賦值做錯不僅可以出現在賦值語句中,而且可以以表示式形式出現在其他語句(輸出語句、迴圈語句等)中,如:

int a, b=123;

printf("%d\n",a=b);

這裡b的值為123,則輸出a的值(也是表示式a=b的值)為123。它在乙個語句中完成了賦值和輸出雙重功能。

賦值運算子和賦值表示式

簡單賦值運算子和表示式,簡單賦值運算子記為 由 連線的式子稱為賦值表示式。其一般形式為 變數 表示式 例如 x a b w sin a sin b y i j 賦值表示式的功能是計算表示式的值再賦予左邊的變數。賦值運算子具有右結合性。因此 a b c 5 可理解為 a b c 5 在其它高階語言中,...

C 賦值運算子與賦值表示式

賦值符號 就是賦值運算子,它的作用是將乙個資料賦給乙個變數。如 a 3 的作用是執行一次賦值操作 或稱賦值運算 把常量3賦給變數a。也可以將乙個表示式的值賦給乙個變數。如果賦值運算子兩側的型別不一致,但都是數值型或字元型時,在賦值時會自動進行型別轉換。1 將浮點型資料 包括單 雙精度 賦給整型變數時...

賦值運算子 邏輯運算子 表示式

賦值運算子 num 1 等價於 num num 1 num 1 等價於 num num 1 num 2 等價於 num num 2 num 2 等價於 num num 2 num 2 等價於 num num 2 整除 num 2 等價於 num num 2 餘數 num 2 等價於 num num ...