大话C语言:第11篇 运算符之自增减运算符

自增(++)和自减(--)是两种常见的C语言中的运算符,用于将变量的值增加或减少1。它们的主要作用包括:

  • 自增 ++, 放在变量前面或后面,对变量自身值+1。

  • 自减 --, 放在变量前面或后面,对变量自身值-1。

  • 方便实现变量的 +1 或 -1 运算。

典型应用场景:

  • 点赞 和 取消点赞。
运算符 术语 示例 结果
++ 自增 int a=1; a++ 或 ++a;(等同于a = a+1) a 值为 2;
-- 自减 int b=5; b-- 或 --b;(等同于b = b-1) b 值为 4;

自增自减语法格式

cpp 复制代码
// 自增
++变量; // 相当于 变量 = 变量 + 1;

// 自减
--变量; // 相当于 变量 = 变量 - 1;

代码示例

cpp 复制代码
// 目标: 掌握 ++ 自增1, -- 自减1 特性
int main(void)
{
	int a = 10;

	//a++; // a = a + 1;
	++a; // a = a + 1;		与 a++ 效果相同

	printf("a = %d\n", a);
	//a--; // a = a -1;
	--a; // a = a -1;		与 a-- 效果相同

	printf("a = %d\n", a);

	return 0;
}

1 前缀后缀区别

注意:++ 和 -- ,如果不是单独使用(如:用在表达式中),前缀和后缀差异巨大

  • 放在变量前,先 +1、-1 再取值使用。

    cpp 复制代码
    int a = 10;
    int res = ++a;  // 先 +1,再取 a 值给 res。 (先加再用)
  • 放在变量后,先 取值用,再 +1、-1

    cpp 复制代码
    int b = 10;
    int res2 = b--; // 先取 b 值给 res2, 而后 b 再 -1  (先用再减)

代码示例

cpp 复制代码
// 目标: 掌握 ++/-- 前缀后缀差异
int main(void)
{
	int a = 10;
	int res = ++a;	// 先+1,再用
	printf("res = %d\n", res);

	int b = 10;
	//printf("b = %d\n", b--);	// 先用,再-1
	printf("b = %d\n", --b);	// 先-1,再用
	printf("b = %d\n", b);		// 查看b值

	return 0;
}

2 注意事项

  • 不能用于常量。

  • 不能用于表达式。

  • 优先级:整体高于算数运算符(必然高于比较、赋值);后缀高于前缀。

  • 不要在一个表达式中,对同一变量 多次 ++、-- 运算。可读性差,且不用编译系统结果不同。

cpp 复制代码
// 目标: 掌握 ++/-- 使用注意事项
int main(void)
{
	// 1. 不能用于常量
	//printf("%d\n", 10++);

	// 2. 不能用于表达式
	int a = 10;
	// (a - 1)++;
	// ++(-a);

	// 3. 全部 高于算数运算
	//int b = ++a * 3;
	int b = a-- * 3;
	printf("b = %d\n", b);

	// 3. 后缀高于前缀
	printf("a = %d\n", -a++);  

	// 对同一变量 多次 ++、-- 运算。可读性差,且不同编译系统结果不同。
	int i = 10;
	int j = 5;

	int res = i++ + ++i - --j - ++j + 3 + i--;
	printf("res = %d\n", res);	// 26  --- Linux下gcc编译器: 28
	printf("i = %d\n", i);		// 11
	printf("j = %d\n", j);		// 5

	return 0;
}

3 总结

  • ++ 自增 1, --自减 1

  • 单独使用,前缀后缀没区别;

  • 非单独使用:前缀,先+1、-1,再用; 后缀,先用,再+1、-1

  • 只适用变量,不能用于常量、表达式。

  • 优先级,高于算数、比较、赋值。后缀高于前缀。

相关推荐
老歌老听老掉牙几秒前
PyQt5中RadioButton互斥选择的实现方法
开发语言·python·qt
一路往蓝-Anbo3 分钟前
C语言从句柄到对象 (四) —— 接口抽象:从 Switch-Case 到通用接口
c语言·开发语言·stm32·嵌入式硬件
csbysj20204 分钟前
WebPages 数据库:构建现代网页管理的基石
开发语言
lzhdim5 分钟前
C#性能优化:从入门到入土!这10个隐藏技巧让你的代码快如闪电
开发语言·性能优化·c#
不会写代码的里奇7 分钟前
从零开发基于DeepSeek的端侧离线大模型语音助手:全流程指南
c++·后端·音视频
沐知全栈开发7 分钟前
C 标准库 - `<stdarg.h>`
开发语言
两个人的幸福online7 分钟前
给cocos 3.8 消息控制器
开发语言·javascript·ecmascript
廋到被风吹走8 分钟前
【JAVA】【JDK】java8版本之后各个版本调整
java·开发语言
不能放弃治疗13 分钟前
发消息逻辑写在MySQL事务中,导致消费逻辑Bug
后端
Cache技术分享14 分钟前
279. Java Stream API - Stream 拼接的两种方式:concat() vs flatMap()
前端·后端