增量/减量运算符
增量/减量运算符是一元运算符,用于将变量的值增加/减少 1。
它们可以有后缀形式
expr ++ |
|||||||||
expr -- |
|||||||||
以及前缀形式
++ expr |
|||||||||
-- expr |
|||||||||
前缀和后缀增量或减量的操作数 expr 必须是 可修改的左值,其 类型 为 整数类型(包括 _Bool
和枚举),实浮点类型或指针类型。它可以是 cvr 修饰的,未修饰的或 原子 的。
后缀增量和减量运算符的结果是 expr 的值。
前缀增量运算符的结果是将值 1
加到 expr 的值的结果:表达式 ++e 等价于 e += 1。前缀减量运算符的结果是将值 1
从 expr 的值中减去的结果:表达式 --e 等价于 e -= 1。
增量运算符启动将适当类型的 1
值添加到操作数的副作用。减量运算符启动将适当类型的 1
值从操作数中减去的副作用。与任何其他副作用一样,这些操作在下一个 顺序点 或之前完成。
int a = 1; int b = a++; // stores 1+a (which is 2) to a // returns the old value of a (which is 1) // After this line, b == 1 and a == 2 a = 1; int c = ++a; // stores 1+a (which is 2) to a // returns 1+a (which is 2) // after this line, c == 2 and a == 2
任何 原子变量 上的后增量或后减量是一个原子读-修改-写操作,内存顺序为 memory_order_seq_cst。 |
(自 C11 起) |
有关指针算术的限制以及应用于操作数的隐式转换,请参见 算术运算符。
内容 |
[编辑] 注释
由于涉及副作用,增量和减量运算符必须谨慎使用,以避免由于违反 排序规则 而导致的未定义行为。
增量/减量运算符未定义为复数或虚数类型:将实数 1 加/减的通常定义对虚数类型无效,并且将其加/减 i
用于虚数,但将 1
用于复数将使它处理 0+yi
与 yi
不同。
与 C++(以及 C 的一些实现)不同,增量/减量表达式本身绝不是左值:&++a 无效。
[编辑] 示例
#include <stdio.h> #include <stdlib.h> int main(void) { int a = 1; int b = 1; printf("original values: a == %d, b == %d\n", a, b); printf("result of postfix operators: a++ == %d, b-- == %d\n", a++, b--); printf("after postfix operators applied: a == %d, b == %d\n", a, b); printf("\n"); // Reset a and b. a = 1; b = 1; printf("original values: a == %d, b == %d\n", a, b); printf("result of prefix operators: ++a == %d, --b == %d\n", ++a, --b); printf("after prefix operators applied: a == %d, b == %d\n", a, b); }
输出
original values: a == 1, b == 1 result of postfix operators: a++ == 1, b-- == 1 after postfix operators applied: a == 2, b == 0 original values: a == 1, b == 1 result of prefix operators: ++a == 2, --b == 0 after prefix operators applied: a == 2, b == 0
[编辑] 参考文献
- C23 标准 (ISO/IEC 9899:2024)
- 6.5.2.4 后缀增量和减量运算符 (p: TBD)
- 6.5.3.1 前缀增量和减量运算符 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018)
- 6.5.2.4 后缀增量和减量运算符 (p: TBD)
- 6.5.3.1 前缀增量和减量运算符 (p: TBD)
- C11 标准 (ISO/IEC 9899:2011)
- 6.5.2.4 后缀增量和减量运算符 (p: 85)
- 6.5.3.1 前缀增量和减量运算符 (p: 88)
- C99 标准 (ISO/IEC 9899:1999)
- 6.5.2.4 后缀增量和减量运算符 (p: 75)
- 6.5.3.1 前缀增量和减量运算符 (p: 78)
- C89/C90 标准 (ISO/IEC 9899:1990)
- 3.3.2.4 后缀增量和减量运算符
- 3.3.3.1 前缀增量和减量运算符
[编辑] 另请参阅
常用运算符 | ||||||
---|---|---|---|---|---|---|
赋值 | 增量 减量 |
算术 | 逻辑 | 比较 | 成员 访问 |
其他 |
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
C++ 文档 for 增量/减量运算符
|