Cprogramming 简明教程

Increment and Decrement Operators in C

C - Increment and Decrement Operators

增量运算符 (++) 将变量值加 1,而减量运算符 (--) 则减 1。

增量和减量运算符经常用于 C 语言中计数循环的构造(带有 for loop )。它们也在数组和 pointer arithmetic 的遍历中得到应用。

++ 和 — 运算符是一元的,可作为变量的前缀或后缀使用。

Example of Increment and Decrement Operators

在下面这个示例中包含多个语句,展示了在不同变化下如何使用增量和减量运算符 −

#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;
}

Output

当你运行这段代码时,它将产生以下输出:

a = 6
b = 6
c = 4
d = 4

Example Explanation

换句话说,“a” 的效果与 “a” 相同,因为这两个表达式都将变量 “a” 的值加 1。类似地,“a--” 的效果与 “--a” 相同。

表达式 “a++;” 可以等同于语句 “a = a + 1;”。在这里,右边的表达式将 1 加到 “a” 中,结果将重新赋值为 1,从而使 “a” 的值加 1。

类似地,“b--;” 等同于 “b = b – 1;”。

Types of Increment Operator

有两种类型的增量运算符 – pre incrementpost increment

Pre (Prefix) Increment Operator

在表达式中,前置增量运算符在使用变量值之前将变量的值加 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

Post (Postfix) Increment Operator

在表达式中,后置增量运算符在使用变量值之后将变量的值加 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

Types of Decrement Operator

有两种类型的减量运算符 – pre decrementpost decrement

Pre (Prefix) decrement Operator

在表达式中,前置减量运算符在使用变量值之前将变量的值减 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

Post (Postfix) Decrement Operator

在表达式中,后置减量运算符在使用变量值之后将变量的值减 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

More Examples of Increment and Decrement Operators

Example 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

上面的示例表明前缀和后缀运算符对操作数变量的值具有相同的效果。但是,当在表达式中这些 “++” 或 “--” 运算符与其它运算符一起出现时,它们的行为不同。

Example 2

在以下代码中,“a”和“b” variables 的初始值相同,但 printf() function 显示的值不同−

#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() 函数使用递增的值进行打印。

Operator Precedence of Increment and Decrement Operators

有很多种 operators in C 。当在一个表达式中使用多个运算符时,将按照其优先级顺序执行。增量和减量运算符与其他运算符一起使用时行为不同。

当一个表达式在其他运算符旁边包含增量或减量运算符时,将首先执行增量和减量操作。后缀增量和减量运算符的优先级高于前缀增量和减量运算符。

Example 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”的现有值赋值给“z”,然后才递增“x”。

Example 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”。

associativity of operators 也扮演着重要的角色。对于增量和减量运算符,关联性是从左到右。因此,如果一个表达式中有多个增量或减量运算符,则将首先执行最左边的运算符,向右移动。

Example 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”相加,结果赋值给“z”为 11,然后“x”递增“x”为 6。

Using the Increment Operator in Loop

在 C 中, for 循环最常用的语法如下−

for (init_val; final_val; increment) {
   statement(s);
}

Example

循环体对于变量的初始值和最终值之间的所有值执行,且在每一轮后递增该变量。

#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