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

2024-06-19 18:28

本文主要是介绍三目运算符中间的表达式可以省略吗(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: ;测试发现编译会报错。

这篇关于三目运算符中间的表达式可以省略吗(a?:c)?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075797

相关文章

Python19 lambda表达式

在 Python 中,lambda 表达式是一个小型匿名函数,通常用于实现简单、单行的函数。lambda 函数可以接受任意数量的参数,但只能有一个表达式。 基本语法: lambda arguments: expression 这里,arguments 是传递给 lambda 的参数,expression 是关于这些参数的表达式,它的计算结果就是 lambda 函数的返回值。 使用

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

JavaSE (Java基础):运算符

3 运算符 3.1 二元运算符         为什么下面这段代码中最后的语句中b元素要加(double)呢?         因为要计算10/40的话,他们都是int类型的在计算机中会取整,而计算机取整一般都是直接舍去小数点后面的数字,那么就会返回0,使用(double)就是将b元素强制转换为double类型的变量,返回的值也就好也是double类型的了,直接返回结果为0.5 pac

python中的*运算符

问题: self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) 这个里面的*是什么意思? 在 Python 中,* 运算符可以用于在函数调用时解包(unpack)列表或元组。这在构建 nn.Sequential 模块时尤其有用,因为 nn

CSS 超出长度省略

更多内容: http://blog.yuhai.win 参考地址:1、https://segmentfault.com/a/11900000062379772、http://www.css88.com/archives/52063、https://github.com/josephschmitt/Clamp.js案例代码:1、https://github.com/yuhaizr/htmlexam

【Qt笔记①】帮助文档、窗口、按钮、信号和槽、lambda表达式

学习第一天:2024-3-9 文章目录 Qt creator 快捷键帮助文档默认生成的main.cpp逐行解释核心类帮助文档的查阅方法-①代码创建按钮第一个第二个对窗口的其他设置 对象树窗口坐标系信号和槽(优点:松散耦合)帮助文档的查阅方法-②找信号函数的方法找槽函数的方法 自定义信号和槽 lambda表达式练习MenuTool Qt creator 快捷键 运行:ctrl

jsp脚本、jsp声明、jsp表达式

<strong><span style="font-size:14px;">jsp脚本 </span></strong><%out.println("这句将输出在浏览器里面,是jsp脚本"); %><%System.out.println("这句将输出在控制台console而不会在浏览器里面输出且查看源代码这一句也是隐藏的"); %> jsp声明变量,方法的格式<%! xxx;%> 举

CSS文本溢出截断省略

文本溢出截断省略 文本溢出截断省略是比较常见的业务场景,主要分为单行文本溢出截断省略与多行文本溢出截断省略,单行的截断方案比较简单,多行截断相对比较复杂。 单行溢出省略 单行文本溢出截断省略直接使用CSS即可,其无兼容问题,文本溢出范围才显示省略号,否则不显示省略号,省略号位置显示刚好,但是只能作为单行文本溢出截断省略的解决方案。 <section><div class="t1">很长很长

SQL Plu计算算数表达式及SQL Plus下清屏快捷键

用PL/SQL数据库语言计算sqrt(58+25*3+(19-9)^2)的值 SQL Plus下清屏快捷键是host cls或者 clear screen PL/SQL计算乘方是2个*号:

js函数声明与函数表达式的区别

在JavaScript中,函数可以通过函数声明和函数表达式两种方式进行定义。 函数声明是通过关键字function和函数名来定义的,例如: function add(a, b) {return a + b;} 函数表达式是将函数赋值给一个变量或者存储在一个对象的属性中,例如: var subtract = function(a, b) {return a - b;}; 两