631 字
3 分钟
Loading
条件运算和逗号运算
2023-10-12

条件运算符——?

用法:

a=(a>10)?a++:a—;

由于一口气能处理条件以及两个不同的结果,所以条件运算符是三目运算符,虽然不看起来很抽象不好理解,但其实是有据可循的:

用自然语言来描述的话,从左到右依次是变量的名称,括号内是我们要判定的东西,问号则是条件运算符,接下来我们单独理解后面的这一串:

a++:a—;

如果前面的判定为真,也就是a>10,就执行冒号左边的内容,也就是a++,如果a不大于10,则执行冒号右边的内容,也就是a—。

当然,冒号分隔两个情况,两边的情况可以执行很多条件,比如这样:

我们假定一个场景,角色拥有生命值,防御力和法术防御力,敌方的攻击会根据伤害的类型来给角色造成伤害。

Int a0=10,a1=15;//a0就是物理防御,a1就是法术防御。

Int hp=100;

Int atk=10;

Char c[10];

//假定这里有一个函数用来决定怪物的攻击

C=(c==‘yes’)?a0—,hp-=a0-atk:a1—,hp-=atk*(a1*0.01),(int)hp;

怪物在攻击角色之后首先降低角色的防御值,角色收到的伤害则是这样判定:物理防御是一比一抵扣,法术防御则是按照百分比抵扣,(int)hp则是转换类型消除小数点后的部分让hp来保持是整数。判定字符c是不是yes就可以实现这样的逻辑,是很实用的东西啦,如果写成一大堆if的话可是很麻烦的事情,而且对内存的占据也比较大。

当然,如果还是不好理解的话,我们不妨这样:

Count=(count>20)?count++:count—;

这个式子其实和下面的这个式子表示的是一个意思:

If(count>20)

{

Count++;

}

Else

{

Count—;

}

在程序简单的时候,可以使用条件运算符来减少运算量,但是程序复杂的话,还是老老实实写if不容易出错一点。

条件运算符的优先级比赋值运算高,但是比所有运算都低。

逗号运算符。

逗号运算符用来连接两个表达式,以右边的表达式的值作为它的结果。比如:

Int a;

a=(1+2,3+4);

printf(“%d”,a);

这样会报错,但是要求括号内的值,会得出7。

通常,逗号运算符常用于if中,用于放多个运算,像是这样:

for(i=0,j=10;i<10;i++)

由于=优先级高,所以在循环的开始就变成了 既i=0,并且j=10。

条件运算和逗号运算
https://vilstia.pages.dev/posts/学习笔记/c/条件运算和逗号运算/
作者
琴泠
发布于
2023-10-12
许可协议
CC BY-NC-SA 4.0