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

三目运算符中间的表达式可以省略吗(a?:c)?

熟悉C语言的童靴对三目运算符都非常熟悉,a? b : c; 如果a为true,则整个运算符的值为b,否则为c;那么问题来了,三目运算符中间的表达式可以省略吗?即a? : c;

1、linux内核中出现的省略情况

本人在阅读内核代码是发现了下面的代码:

    preferred_zoneref = first_zones_zonelist(ac.zonelist, ac.high_zoneidx,
                ac.nodemask ? : &cpuset_current_mems_allowed,&ac.preferred_zone);

其中标红部分是一个三目运算符,而且还是一个省略的三目运算符。那么问题来了,a? : c如果a为true的情况下,整个三目运算符的值到底是什么?

2、动手测试下

#include <stdio.h>
#include <stdlib.h>

int bar(char *a,char*b)
{
    if(a != NULL)
        printf("%s \r\n",a);
    else
        printf("a is NULL \r\n");

    if(b != NULL)
        printf("%s \r\n",b);
    else
        printf("b is NULL \r\n");

    return 0;
}

int main(int argc,char *argv[])
{
    char *a = "hello";
    char *b = "world";
    char *c = "how are you?";
    bar(a,b);
    printf("%s \r\n",c?"no NULL":"NULL");
    bar(a,c? : "i am fine");
    return 0;
}

输出结果如下:

hello 
world 
no NULL 
hello 
how are you? 

c? : "i am fine" 的运算结果是"how are you?",即变量c初始化的值。

所以可知,三目运算符(a?b:c)出现省略的情况下(a?:c),省略值就是第一个运算符a的值。

如果将c省略,即a?b: ;测试发现编译会报错。

相关文章:

  • 【pytorch01】简单回归问题
  • 空间复杂度 线性表,顺序表尾插。
  • 离线linux通过USB连接并使用手机网络
  • 初学者应该掌握的MySQL数据库的基本组成部分及概念
  • 【Docker】——安装镜像和创建容器,详解镜像和Dockerfile
  • 【Qt】QList<QVariantMap>中数据修改
  • ic基础|功耗篇03:ic设计人员如何在代码中降低功耗?一文带你了解行为级以及RTL级低功耗技术
  • 指纹浏览器与虚拟机的区别及在跨境电商中的应用
  • LeetCode 每日一题 2024/6/17-2024/6/23
  • ChatGPT 简介
  • 日语 13 14
  • ping命令返回结果实例分析
  • K8S - 理解ClusterIP - 集群内部service之间的反向代理和loadbalancer
  • 深入解析Linux Bridge:原理、架构、操作与持久化配置
  • PAL: Program-aided Language Models
  • 时间复杂度分析经典问题——最大子序列和
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【391天】每日项目总结系列128(2018.03.03)
  • Android单元测试 - 几个重要问题
  • angular学习第一篇-----环境搭建
  • avalon2.2的VM生成过程
  • go append函数以及写入
  • Laravel5.4 Queues队列学习
  • Linux Process Manage
  • mysql常用命令汇总
  • Python连接Oracle
  • React-flux杂记
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 浅谈Golang中select的用法
  • 推荐一个React的管理后台框架
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 转载:[译] 内容加速黑科技趣谈
  • 阿里云服务器如何修改远程端口?
  • ​什么是bug?bug的源头在哪里?
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (编译到47%失败)to be deleted
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)Java对象在Hibernate持久化层的状态
  • (十)T检验-第一部分
  • (转)linux 命令大全
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net 发送邮件
  • .Net6使用WebSocket与前端进行通信
  • .net生成的类,跨工程调用显示注释
  • @Transient注解
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [4.9福建四校联考]
  • [android] 请求码和结果码的作用
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [BJDCTF 2020]easy_md5