
- C程式設計教程
- C語言 - 首頁
- C語言基礎
- C語言 - 概述
- C語言 - 特性
- C語言 - 歷史
- C語言 - 環境搭建
- C語言 - 程式結構
- C語言 - Hello World
- C語言 - 編譯過程
- C語言 - 註釋
- C語言 - 詞法單元
- C語言 - 關鍵字
- C語言 - 識別符號
- C語言 - 使用者輸入
- C語言 - 基本語法
- C語言 - 資料型別
- C語言 - 變數
- C語言 - 整數提升
- C語言 - 型別轉換
- C語言 - 型別強制轉換
- C語言 - 布林值
- C語言中的常量和字面量
- C語言 - 常量
- C語言 - 字面量
- C語言 - 轉義序列
- C語言 - 格式說明符
- C語言中的運算子
- C語言 - 運算子
- C語言 - 算術運算子
- C語言 - 關係運算符
- C語言 - 邏輯運算子
- C語言 - 位運算子
- C語言 - 賦值運算子
- C語言 - 一元運算子
- C語言 - 自增和自減運算子
- C語言 - 三元運算子
- C語言 - sizeof 運算子
- C語言 - 運算子優先順序
- C語言 - 其他運算子
- C語言中的決策語句
- C語言 - 決策語句
- C語言 - if 語句
- C語言 - if...else 語句
- C語言 - 巢狀 if 語句
- C語言 - switch 語句
- C語言 - 巢狀 switch 語句
- C語言中的迴圈語句
- C語言 - 迴圈語句
- C語言 - while 迴圈
- C語言 - for 迴圈
- C語言 - do...while 迴圈
- C語言 - 巢狀迴圈
- C語言 - 無限迴圈
- C語言 - break 語句
- C語言 - continue 語句
- C語言 - goto 語句
- C語言中的函式
- C語言 - 函式
- C語言 - 主函式
- C語言 - 按值呼叫函式
- C語言 - 按引用呼叫函式
- C語言 - 巢狀函式
- C語言 - 可變引數函式
- C語言 - 使用者自定義函式
- C語言 - 回撥函式
- C語言 - return 語句
- C語言 - 遞迴
- C語言中的作用域規則
- C語言 - 作用域規則
- C語言 - 靜態變數
- C語言 - 全域性變數
- C語言中的陣列
- C語言 - 陣列
- C語言 - 陣列的特性
- C語言 - 多維陣列
- C語言 - 將陣列傳遞給函式
- C語言 - 從函式返回陣列
- C語言 - 變長陣列
- C語言中的指標
- C語言 - 指標
- C語言 - 指標和陣列
- C語言 - 指標的應用
- C語言 - 指標運算
- C語言 - 指標陣列
- C語言 - 指向指標的指標
- C語言 - 將指標傳遞給函式
- C語言 - 從函式返回指標
- C語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列的區別
- C語言 - 字元指標和函式
- C語言 - 空指標
- C語言 - void 指標
- C語言 - 懸空指標
- C語言 - 解引用指標
- C語言 - 近指標、遠指標和巨型指標
- C語言 - 指標陣列的初始化
- C語言 - 指標與多維陣列的區別
- C語言中的字串
- C語言 - 字串
- C語言 - 字串陣列
- C語言 - 特殊字元
- C語言中的結構體和聯合體
- C語言 - 結構體
- C語言 - 結構體和函式
- C語言 - 結構體陣列
- C語言 - 自引用結構體
- C語言 - 查詢表
- C語言 - 點(.)運算子
- C語言 - 列舉(enum)
- C語言 - 結構體填充和壓縮
- C語言 - 巢狀結構體
- C語言 - 匿名結構體和聯合體
- C語言 - 聯合體
- C語言 - 位段
- C語言 - typedef
- C語言中的檔案處理
- C語言 - 輸入輸出
- C語言 - 檔案I/O(檔案處理)
- C語言預處理器
- C語言 - 預處理器
- C語言 - 編譯指示
- C語言 - 預處理器運算子
- C語言 - 宏
- C語言 - 標頭檔案
- C語言中的記憶體管理
- C語言 - 記憶體管理
- C語言 - 記憶體地址
- C語言 - 儲存類別
- 其他主題
- C語言 - 錯誤處理
- C語言 - 可變引數
- C語言 - 命令執行
- C語言 - 數學函式
- C語言 - static 關鍵字
- C語言 - 隨機數生成
- C語言 - 命令列引數
- C程式設計資源
- C語言 - 問答
- C語言 - 快速指南
- C語言 - 速查表
- C語言 - 有用資源
- C語言 - 討論
C語言中的賦值運算子
在C語言中,賦值運算子將某個值儲存到已宣告的變數中。C語言中的變數可以賦值字面量、另一個變數或表示式的值。
要賦值的值構成右運算元,而要賦值的變數應該是“=”符號左邊的運算元,“=”符號在C語言中定義為簡單的賦值運算子。
此外,C語言還有幾種增強型賦值運算子。
下表列出了C語言支援的賦值運算子:
運算子 | 描述 | 示例 |
---|---|---|
= | 簡單的賦值運算子。將右運算元的值賦給左運算元。 | C = A + B 將 A + B 的值賦給 C |
+= | 加法賦值運算子。它將右運算元加到左運算元上,並將結果賦給左運算元。 | C += A 等效於 C = C + A |
-= | 減法賦值運算子。它從左運算元中減去右運算元,並將結果賦給左運算元。 | C -= A 等效於 C = C - A |
*= | 乘法賦值運算子。它將右運算元乘以左運算元,並將結果賦給左運算元。 | C *= A 等效於 C = C * A |
/= | 除法賦值運算子。它將左運算元除以右運算元,並將結果賦給左運算元。 | C /= A 等效於 C = C / A |
%= | 取模賦值運算子。它使用兩個運算元進行取模運算,並將結果賦給左運算元。 | C %= A 等效於 C = C % A |
<<= | 左移賦值運算子。 | C <<= 2 等效於 C = C << 2 |
>>= | 右移賦值運算子。 | C >>= 2 等效於 C = C >> 2 |
&= | 按位與賦值運算子。 | C &= 2 等效於 C = C & 2 |
^= | 按位異或賦值運算子。 | C ^= 2 等效於 C = C ^ 2 |
|= | 按位或賦值運算子。 | C |= 2 等效於 C = C | 2 |
簡單的賦值運算子 (=)
= 運算子是 C 語言中最常用的運算子之一。根據 ANSI C 標準,所有變數都必須在開頭宣告。不允許在第一個處理語句之後宣告變數。
您可以宣告一個變數,稍後在程式碼中為其賦值,或者在宣告時對其進行初始化。
您可以在賦值語句中使用字面量、另一個變數或表示式。
int x = 10; // declaration with initialization int y; // declaration y = 20; // assignment later int z = x + y; // assign an expression int d = 3, f = 5; // definition and initializing d and f. char x = 'x'; // the variable x has the value 'x'.
一旦聲明瞭某種型別的變數,就不能再為其賦值其他型別的變數。在這種情況下,C 編譯器會報告型別不匹配錯誤。
在 C 語言中,引用記憶體位置的表示式稱為“左值”表示式。左值可以出現在賦值的左邊或右邊。
另一方面,術語右值指的是儲存在記憶體某個地址中的資料值。右值是一個不能為其賦值的表示式,這意味著右值可以出現在賦值的右邊,但不能出現在左邊。
變數是左值,因此可以出現在賦值的左邊。數字字面量是右值,因此不能賦值,也不能出現在左邊。請看以下有效和無效的語句:
int g = 20; // valid statement 10 = 20; // invalid statement
增強型賦值運算子
除了=運算子之外,C語言還允許您將算術運算子和位運算子與=符號組合起來,形成增強型或複合賦值運算子。增強型運算子提供了一種方便的快捷方式,用於將算術運算或位運算與賦值結合起來。
示例 1
例如,表示式“a += b”具有相同的執行效果:先執行“a + b”,然後將結果賦值回變數“a”。
#include <stdio.h> int main(){ int a = 10; int b = 20; a += b; printf("a: %d", a); return 0; }
輸出
執行程式碼並檢查其輸出:
a: 30
示例 2
類似地,表示式“a <<= b”具有相同的執行效果:先執行“a << b”,然後將結果賦值回變數“a”。
#include <stdio.h> int main(){ int a = 60; int b = 2; a <<= b; printf("a: %d", a); return 0; }
輸出
執行程式碼並檢查其輸出:
a: 240
示例 3
這是一個演示C語言中賦值運算子用法的C程式:
#include <stdio.h> int main(){ int a = 21; int c ; c = a; printf("Line 1 - = Operator Example, Value of c = %d\n", c ); c += a; printf("Line 2 - += Operator Example, Value of c = %d\n", c ); c -= a; printf("Line 3 - -= Operator Example, Value of c = %d\n", c ); c *= a; printf("Line 4 - *= Operator Example, Value of c = %d\n", c ); c /= a; printf("Line 5 - /= Operator Example, Value of c = %d\n", c ); c = 200; c %= a; printf("Line 6 - %%= Operator Example, Value of c = %d\n", c ); c <<= 2; printf("Line 7 - <<= Operator Example, Value of c = %d\n", c ); c >>= 2; printf("Line 8 - >>= Operator Example, Value of c = %d\n", c ); c &= 2; printf("Line 9 - &= Operator Example, Value of c = %d\n", c ); c ^= 2; printf("Line 10 - ^= Operator Example, Value of c = %d\n", c ); c |= 2; printf("Line 11 - |= Operator Example, Value of c = %d\n", c ); return 0; }
輸出
編譯並執行上述程式時,將產生以下結果:
Line 1 - = Operator Example, Value of c = 21 Line 2 - += Operator Example, Value of c = 42 Line 3 - -= Operator Example, Value of c = 21 Line 4 - *= Operator Example, Value of c = 441 Line 5 - /= Operator Example, Value of c = 21 Line 6 - %= Operator Example, Value of c = 11 Line 7 - <<= Operator Example, Value of c = 44 Line 8 - >>= Operator Example, Value of c = 11 Line 9 - &= Operator Example, Value of c = 2 Line 10 - ^= Operator Example, Value of c = 0 Line 11 - |= Operator Example, Value of c = 2