
- 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語言 - NULL指標
- 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語言 - 自增和自減運算子
自增運算子 (++) 將變數的值增加 1,而自減運算子 (--) 將變數的值減少 1。
自增和自減運算子經常用於構建 C 語言中的計數迴圈(使用for迴圈)。它們也應用於陣列遍歷和指標運算。
++ 和 -- 運算子是一元運算子,可以用作變數的字首或字尾。
自增和自減運算子示例
下面的示例包含多個語句,演示了自增和自減運算子的不同用法:
#include <stdio.h> int main() { int a = 5, b = 5, c = 5, d = 5; a++; // postfix increment ++b; // prefix increment c--; // postfix decrement --d; // prefix decrement printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); printf("d = %d\n", d); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
a = 6 b = 6 c = 4 d = 4
示例說明
換句話說,“a++”與“++a”的效果相同,這兩個表示式都會將變數“a”的值增加 1。類似地,“a--”與“--a”的效果相同。
表示式“a++;”可以視為語句“a = a + 1;”的等效形式。這裡,右側的表示式將 1 加到“a”,並將結果賦值回 1,從而將“a”的值增加 1。
類似地,“b--;”等效於“b = b – 1;”。
自增運算子的型別
自增運算子有兩種型別:字首自增和字尾自增。
字首自增運算子
在一個表示式中,字首自增運算子在使用變數的值之前將變數的值增加 1。
語法
++variable_name;
示例
在下面的示例中,我們使用字首自增運算子,其中“x”的值將增加 1,然後在表示式中使用增加後的值。
#include <stdio.h> int main() { int x = 10; int y = 10 + ++x; printf("x = %d, y = %d\n", x, y); return 0; }
執行此程式碼時,將產生以下輸出:
x = 11, y = 21
字尾自增運算子
在一個表示式中,字尾自增運算子在使用變數的值之後將變數的值增加 1。
語法
variable_name++;
示例
在下面的示例中,我們使用字尾自增運算子,其中“x”的值將用於表示式,然後將其增加 1。
#include <stdio.h> int main() { int x = 10; int y = 10 + x++; printf("x = %d, y = %d\n", x, y); return 0; }
執行此程式碼時,將產生以下輸出:
x = 11, y = 20
自減運算子的型別
自減運算子有兩種型別:字首自減和字尾自減。
字首自減運算子
在一個表示式中,字首自減運算子在使用變數的值之前將變數的值減少 1。
語法
--variable_name;
示例
在下面的示例中,我們使用字首自減運算子,其中“x”的值將減少 1,然後在表示式中使用減少後的值。
#include <stdio.h> int main() { int x = 10; int y = 10 + --x; printf("x = %d, y = %d\n", x, y); return 0; }
執行此程式碼時,將產生以下輸出:
x = 9, y = 19
字尾自減運算子
在一個表示式中,字尾自減運算子在使用變數的值之後將變數的值減少 1。
語法
variable_name--;
示例
在下面的示例中,我們使用字尾自減運算子,其中“x”的值將用於表示式,然後將其減少 1。
#include <stdio.h> int main() { int x = 10; int y = 10 + x--; printf("x = %d, y = %d\n", x, y); return 0; }
執行此程式碼時,將產生以下輸出:
x = 9, y = 20
更多自增和自減運算子示例
示例 1
下面的示例重點介紹了字首/字尾自增/自減的用法:
#include <stdio.h> int main(){ char a = 'a', b = 'M'; int x = 5, y = 23; printf("a: %c b: %c\n", a, b); a++; printf("postfix increment a: %c\n", a); ++b; printf("prefix increment b: %c\n", b); printf("x: %d y: %d\n", x, y); x--; printf("postfix decrement x : %d\n", x); --y; printf("prefix decrement y : %d\n", y); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
a: a b: M postfix increment a: b prefix increment b: N x: 5 y: 23 postfix decrement x: 4 prefix decrement y: 22
上述示例顯示,字首和字尾運算子對運算元變數的值具有相同的影響。但是,當這些“++”或“--”運算子與表示式中的其他運算子一起出現時,它們的執行方式會有所不同。
示例 2
在下面的程式碼中,“a”和“b”變數的初始值相同,但printf()函式顯示的值不同:
#include <stdio.h> int main(){ int x = 5, y = 5; printf("x: %d y: %d\n", x,y); printf("postfix increment x: %d\n", x++); printf("prefix increment y: %d\n", ++y); return 0; }
輸出
執行程式碼並檢查其輸出:
x: 5 y: 5 postfix increment x: 5 prefix increment y: 6
在第一種情況下,printf()函式先列印“x”的值,然後增加其值。在第二種情況下,先執行自增運算子,printf()函式使用增加後的值進行列印。
自增和自減運算子的運算子優先順序
C語言中有許多運算子。當在一個表示式中使用多個運算子時,它們的執行順序取決於它們的優先順序。自增和自減運算子與其他運算子一起使用時,行為有所不同。
當表示式包含自增或自減運算子以及其他運算子時,先執行自增和自減運算。字尾自增和自減運算子的優先順序高於字首自增和自減運算子。
另請閱讀: C語言中的運算子優先順序
示例 1
請看下面的例子:
#include <stdio.h> int main(){ int x = 5, z; printf("x: %d \n", x); z = x++; printf("x: %d z: %d\n", x, z); return 0; }
輸出
執行程式碼並檢查其輸出:
x: 5 x: 6 z: 5
由於“x++”將“x”的值增加到 6,您可能預期“z”也為 6。但是,結果顯示“z”為 5。這是因為賦值運算子的優先順序高於字尾自增運算子。因此,“x”的現有值在自增“x”之前被賦值給“z”。
示例 2
再看下面的另一個例子:
#include <stdio.h> int main(){ int x = 5, y = 5, z; printf("x: %d y: %d\n", x,y); z = ++y; printf("y: %d z: %d\n", y ,z); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
y: 5 y: 6 z: 6
結果可能令人困惑,因為“y”和“z”的值現在都是 6。原因是字首自增運算子的優先順序高於賦值運算子。因此,“y”先自增,然後將其新值賦給“z”。
運算子的結合性也起著重要作用。對於自增和自減運算子,結合性是從左到右。因此,如果在一個表示式中有多個自增或自減運算子,則最左邊的運算子將首先執行,然後向右移動。
示例 3
在這個例子中,賦值表示式同時包含字首和字尾運算子。
#include <stdio.h> int main(){ int x = 5, y = 5, z; z = x++ + ++y; printf("x: %d y: %d z: %d\n", x,y,z); return 0; }
輸出
執行程式碼並檢查其輸出:
x: 6 y:6 z: 11
在這個例子中,第一個要執行的操作是“y++”(“y”變為 6)。其次,“+”運算子將“x”(值為 5)和“y”相加,結果 11 賦值給“z”,然後“x++”將“x”增加到 6。
在迴圈中使用自增運算子
在 C 語言中,最常用的for迴圈語法如下:
for (init_val; final_val; increment) { statement(s); }
示例
迴圈體將對變數在初始值和最終值之間的所有值執行,每次迴圈後遞增。
#include <stdio.h> int main(){ int x; for (x = 1; x <= 5; x++){ printf("x: %d\n", x); } return 0; }
輸出
執行此程式碼時,將產生以下輸出:
x: 1 x: 2 x: 3 x: 4 x: 5