当前位置: 首页 > news >正文

单目操作符与逗号表达式

目录

一、单目操作符

特点:

注意事项:

示例:

二、逗号表达式

1、基本概念

2、代码示例分析

示例 1:计算逗号表达式的结果

执行过程:

示例 2:逗号表达式在 if 语句中的应用

执行过程:

示例 3:逗号表达式优化循环代码

3、适用场景

4、注意事项


一、单目操作符

        单目操作符(也称为一元操作符)是仅需要一个操作数的运算符。C语言中常见的单目操作符包括:

  • 逻辑非!

  • 自增/自减++--

  • 取地址/解引用&*

  • 算术运算+(正号)、-(负号)

  • 位运算~(按位取反)

  • 类型相关sizeof(求大小)、(类型)(强制类型转换)

特点:

  1. 单操作数:仅作用于一个操作数。

  2. 优先级高:多数单目操作符的优先级高于双目操作符(如算术运算符)。

  3. 结合性:通常从右向左结合(如 *p++ 等价于 *(p++))。

注意事项:

  • & 和 *

    • & 用于获取变量的内存地址(如 &a)。

    • * 用于解引用指针(如 *ptr)。

    • 这两个操作符将在指针章节详细讲解。

  • 副作用:自增/自减操作符(++--)会直接修改操作数的值,需注意表达式的求值顺序。

示例:

int a = 10;
int *p = &a;    // & 取地址
printf("%d", *p); // * 解引用int b = -a;     // - 负号
int c = !b;     // ! 逻辑非

后续学习中,指针相关的 & 和 * 会进一步展开说明。


二、逗号表达式

1、基本概念

逗号表达式是由逗号 , 隔开的多个表达式组成的,形式如下:

exp1, exp2, exp3, ..., expN

执行规则

  1. 从左到右依次计算每个表达式。

  2. 整个表达式的结果是最后一个表达式(expN)的值。

2、代码示例分析

示例 1:计算逗号表达式的结果

int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);  // 逗号表达式

执行过程

  1. a > b → 1 > 2(假,无副作用,不影响变量值)

  2. a = b + 10 → a = 2 + 10 → a = 12

  3. a → 返回 12(无副作用)

  4. b = a + 1 → b = 12 + 1 → b = 13(最后一步的值作为整个表达式的结果)
    最终结果c = 13

示例 2:逗号表达式在 if 语句中的应用

if (a = b + 1, c = a / 2, d > 0)

执行过程

  1. a = b + 1 → 计算并赋值

  2. c = a / 2 → 计算并赋值

  3. d > 0 → 作为 if 的判断条件
    作用:在 if 判断前,先执行多个操作,最后以 d > 0 决定是否进入分支。

示例 3:逗号表达式优化循环代码

原代码

a = get_val();
count_val(a);
while (a > 0) {// 业务处理a = get_val();count_val(a);
}

优化后(使用逗号表达式)

while (a = get_val(), count_val(a), a > 0) {// 业务处理
}

优势

  • 减少重复代码,使逻辑更紧凑。

  • 在 while 条件部分完成变量的更新和判断,提高可读性。

3、适用场景

  1. 简化多步操作:如 whileif 等需要先计算再判断的情况。

  2. 短小逻辑合并:在保证可读性的前提下,减少冗余代码。

  3. 宏定义中的多语句(需谨慎使用,避免副作用)。

4、注意事项

  • 可读性:过度使用逗号表达式可能降低代码清晰度,应权衡使用。

  • 求值顺序:确保依赖关系正确,避免未定义行为。

逗号表达式在合理使用时能优化代码结构,但需结合实际情况选择是否采用。

http://www.dtcms.com/a/332052.html

相关文章:

  • CoreShop商城框架开启多租户(2)
  • 莫队 + 离散化 Ann and Books
  • 【19-模型训练细节 】
  • 业务敏捷性对SAP驱动型企业意味着什么?如何保持企业敏捷性?
  • 零信任架构(Zero Trust Architecture, ZTA)(通过动态验证和最小权限控制,实现对所有访问请求的严格授权和持续监控)
  • latex 中破折号的输入
  • 介绍java中atomic及相关类
  • PERC初探暨小试牛刀
  • Vue3 vxeTree树形组件完全指南:从入门到精通的完整使用教程
  • QT6(可视化UI设计代码实现)
  • MATLAB实现图像增强(直方图均衡化)
  • 数学分析| 极限论| 1.数列极限常用方法总结
  • App冷启动阶段Open Dexfiles实现原理【ART虚拟机系列2】
  • docker nginx 定时脚本保存30天日志信息
  • MFC的使用——使用ChartCtrl绘制曲线
  • 2025.8.13~14 实习总结
  • 计算机网络技术学习-day1《网络乾坤:从比特洪流到协议星河的奇幻之旅》​
  • MCU中的LTDC(LCD-TFT Display Controller)
  • 网卡聚合teamdctl
  • 大模型技术栈全景
  • Java 图片像素碰撞检测
  • Linux软件编程-进程(1)
  • 【嵌入式C语言】四
  • 【PCB设计经验】3D模型在线预览!效率便捷!
  • pycharm远程连接服务器跑实验详细操作
  • ClickHouse 日常运维命令总结
  • 并发编程原理与实战(二十三)StampedLock应用实战与其他锁性能对比分析
  • CentOS7系统负载异常飙高全链路分析详细指南
  • Kaggle赛题分析1:Elo用户忠诚度评分预测(2)-特征工程与模型训练
  • 解决Python环境混乱问题