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
廣告