C语言-关于三目操作符的部分知识

本文介绍了C语言中三目操作符的基本用法,强调了其简洁性但可能降低代码可读性的特点,并指出在不适当使用括号时可能出现的优先级问题和赋值错误。
摘要由CSDN通过智能技术生成

后续视我自己的学习情况更新

说在前面,三目操作符的使用应避免为了追求代码层面的简洁而大大降低代码的可阅读性。

本文章的所有代码都使用了vs2022进行了运行检验,其中关于scanf在vs2022中的报错问题,以后有机会再讲。

初识三目操作符

C语言中的三目操作符,也称作三元操作符、三目运算符、条件运算符、conditional operator,其形式为:

表达式1 ? 表达式2 : 表达式3

它的求值步骤是这样的:

首先,计算出表达式1的值,如果值为0,则记作【假】;如果是非0,则记作【真】。

然后,【真】则运算并输出表达式2;【假】则运算表达式3。

此处的【表达式】可以是任何类型的表达式。

它的功能类似于if+else,是一种二选一的选择。比如:(这里我只写出main函数的主要内容,就是那个int main(){ }的大括号里的内容)

int max, i, j;

printf("请输入用于比较大小的两个整数:");
scanf("%d %d", &i, &j);


//我们重点关注以下的这个部分,这是一个用来输出两个整数中更大的那个的代码
if(i>j){
printf("max = %d\n", i);
}
else{
printf("max = %d\n", j);
}

而使用三目操作符则会有更加简洁的表达形式:

printf("max = %d\n", i>j ? i : j);
//这个语句的效果是:如果i>j为【真】,则三目操作符输出i;否则输出j。
//并将输出的i或j用于替换printf中的占位符【%d】
//关于【占位符】或【%d】,以后有机会也许会讲,也可以查找csdn上的相关文章
​​​​图1 vs2022运行实例

三目操作符注意事项

三目运算符的优先度极低,也就是说三目操作符在大部分的代码中,往往是最后计算的。

但是,如果你刚好不喜欢给表达式增加合适的括号,以增加可阅读性和使计算机明确计算顺序,而且刚好写了类似下方的代码时,你的编译器大概率会报错:

int i = 1, x = 2; 

i % 3 ? x = x + i : x = 2 * x;

“表达式必须是可修改的左值”

这句话是在说哪个表达式呢?其实是赋值运算符“=”所提示的错误。

在上面的代码中,“i % 3”是最先发生的,其结果为1除以3的余数,也就是1,在C语言中,【非0】表示【真】,而【0】表示【假】,所以三目操作符会运算“x = x + i”,然后就此结束...吗?

并没有,虽然三目操作符的运算优先度十分的低,但它还不是谷底,赋值运算符和逗号比它还要低。

因此,在三目操作符执行完毕之后的下一步,是这样的:

(i % 3 ? x = x + i : x) = 2 * x;

而C语言中三目操作符的返回值是归属于不可赋值的右值,因此,赋值运算符无法正常工作,并报错。

关于运算优先度的表格,可用在CSDN内搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值