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;
}
Types of Increment Operator
有两种类型的增量运算符 – pre increment 和 post increment 。
Types of Decrement Operator
有两种类型的减量运算符 – pre decrement 和 post decrement 。
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 。当在一个表达式中使用多个运算符时,将按照其优先级顺序执行。增量和减量运算符与其他运算符一起使用时行为不同。
当一个表达式在其他运算符旁边包含增量或减量运算符时,将首先执行增量和减量操作。后缀增量和减量运算符的优先级高于前缀增量和减量运算符。
Read also: Operator Precedence 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 也扮演着重要的角色。对于增量和减量运算符,关联性是从左到右。因此,如果一个表达式中有多个增量或减量运算符,则将首先执行最左边的运算符,向右移动。