《C和指针》笔记19: 条件操作符

条件操作符接受三个操作数。它也会控制子表达式的求值顺序。下面是它的用法:

c 复制代码
expression1 ? expression2 : expression3

条件操作符的优先级非常低,所以它的各个操作数即使不加括号,一般也不会有问题。但是,为了清楚起见,人们还是倾向于在它的各个子表达式两端加上括号。

给个例子说明它的用法:

c 复制代码
b = a > 5 ? 3 : 20;

可以读作"a是不是大于5?如果是,就执行b-6,否则执行c/2",它等价于下面的语句

c 复制代码
if (a > 5)
	b = 3;
else
	b = 20;

这好像看不出什么优点,但是如果是下面的语句

c 复制代码
if(a > 5 )
	b[ 2 * c + d( e / 5 ) ] = 3;
else
	b[ 2 * c + d( e / 5 ) ] = -20;

数组的下标要写两次,显得很繁琐,写成下面的语句反而简洁,而且不容易出错:

c 复制代码
b[ 2 * c + d( e / 5 ) ] = a > 5 ? 3 : -20;

参考

  1. 《C和指针》
相关推荐
智者知已应修善业10 小时前
【51单片机数码管逐位显示1-8余位不亮】2024-10-23
c语言·经验分享·笔记·嵌入式硬件·51单片机
caimouse11 小时前
ReactOS 图形系统分析(47):GDI 批处理 — gdibatch.c
c语言·开发语言
caimouse12 小时前
ReactOS 窗口系统分析(1):窗口对象与创建 — window.c
c语言·开发语言
caimouse12 小时前
ReactOS 图形系统分析(53):系统库存对象 — stockobj.c
c语言·开发语言·spring
caimouse13 小时前
ReactOS 图形系统分析(52):OpenGL 支持 — wingl.c
c语言·开发语言
j7~13 小时前
【C语言】《C语言函数递归完全指南:思想、限制、经典例题(阶乘/斐波那契/青蛙跳台阶/汉诺塔)与迭代优化》
c语言·函数递归·汉诺塔问题·青蛙跳台阶问题·递归与迭代·n的阶乘
YSL07012415 小时前
动态内存管理
c语言
BreezeJuvenile15 小时前
基于C语言的SPSC环形缓冲区程序实现
c语言·环形缓冲区
SuperByteMaster15 小时前
recursive mutex的使用场景和场景代码
c语言
caimouse16 小时前
ReactOS 窗口系统分析(2):窗口类 — class.c
c语言·开发语言