C語言中文網 目錄

賦值運算符及賦值表達式,C語言賦值運算符及其賦值表達式詳解

賦值操作是程序設計中最常用的操作之一,C 語言共提供了 11 個賦值運算符,均為二元運算符,其中僅有一個為基本賦值運算符 =,其余 10 個均是復合賦值運算符,即:
  • 基本賦值運算符:=。
  • 復合賦值運算符:+=(加賦值)、-=(減賦值)、*=(乘賦值)、/=(除賦值)、%=(求余賦值)、 <<=(左移賦值)、>>=(右移賦值)、&=(按位與賦值)、|=(按位或賦值)、*A=(按位異或賦值)。

賦值操作的優先級較低,僅高于逗號運算符。

基本賦值 =

如 int a=5; 表示把 5 賦值給整型變量 a,不能讀成 “a等于5”。賦值號左邊必須為左值,賦值號右邊的右值可以為常量、變量或表達式。如下賦值均是正確的。
int a,b; //定義整型變量a和b
a=3; //把常量3賦值給a,右值為常量
b=a; //把變量a的值賦給b,右值為變量
b=a+3; //把求和表達式a+3的值賦給b,右值為表達式
以下賦值均是錯誤的。
int a=2;
3=a; //錯誤,常量3不能作為左值
const int b=5; //定義整型常變量只讀變量b,并初始化為5,其值不能被改變
b=1; //錯誤,企圖改變常變量的值,即常變量不能作左值

復合賦值:+=、-=、*=、/=、%=

a+=b; 等價于 a=a+b;
a-=b; 等價于 a=a-b;
a*=b; 等價于 a=a*b;
a/=b; 等價于 a=a/b;

例如:
int a=5;
a+=3; //等價于 a=a+3;
由于賦值運算符的優先級很低,僅高于逗號運算符,故最后做賦值操作。

a+=3+2; 等價于 a=a+(3+2);

通過下面的例子,掌握上述 4 種復合賦值運算符。

【例 1】分析以下程序,輸出其運行結果。
#include<stdio.h>
int main (void)
{
    int a=l,b=2,c=3; //定義三個整型變量,并初始化
    float d=10.2f; //定義float變量d,用浮點常量10.2初始化
    a+=1; //相當于 a=a+1;即 a=1+1=2
    b-=a+5;
    c*=a-4;
    printf ("%d,%d,%d,%f",a,b,c,d/=a);
    return 0;
}
代碼分析:
1) float d=10.2f; 如果改為 float d=10.2; 雖然沒有語法錯誤,可以正常運行,但一般編譯器會提示 warning(警告),原因是編譯器會把 10.2 等常量默認當成 double 型常量處理,與 d 的類型 float 不一致,故出現警告。因此可通過加 f 明確 10.2 為 float 型常量。

2) a+=1; 相當于 a=a+1; 求出 a 為 2。

3) b-=a+5; 由于賦值運算符的優先級低于算術求和運算符,故該語句等價于 b=b-(a+5);,即 b=2-(2+5);,得 b=-5;。同理,c*=a-4; 即 c=3*(2-4);,故 c=-60

4) printf("%d,%d,%d,%f",a,b,c,d/=a); 由于輸出列表中 a、b 和 c 均為 int 型變量,故輸出格式占位符均為 %d;輸出列表中第 4 項為表達式,其表達式的值為 d=d/a=10.2f/2=5.1,為浮點類型,輸出格式占位符為 %f,在 VC++ 6.0 環境中,float 類型為小數點后保留 6 位數字。

運行結果為:
2,-5,-6,5.100000

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo