条件运算符——?
用法:
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。