- 46
- 0
例子:z = (a == b ? a : b ? c : d);
我知道这个例子,从右向左结合的话,会是:z = (a == b ? a : (b ? c : d));
从左向右结合的话,会是:z = ((a == b ? a : b) ? c : d);
另一个例子:a = b = c
等价于a = (b = c)
那我是不是可以理解成这个结合性相当于给先结合的东西加上括号,也就是优先级变高了。放到第一个例子里就是先计算b ? c : d
但是我用过下面这个例子测试
int c = 0;
int test = c == 0? printf("1\n"):(c=2)?(c = 3):printf("4\n");
printf("%d",c);
结果输出1,我知道按照规范不能再条件表达式中有赋值语句,但这只是为了测试执行顺序,结果说明它是先从最左边的1开始运算的。
真诚求助!
- 共 0 条
- 全部回答
-
゛柠檬加醋 普通会员 1楼
在C语言中,条件表达式是通过“与”(&&)、“或”(||)、“非”(!)和“短路”(||=)四种操作符结合在一起的。
-
“与”(&&):两个操作符的组合表示“如果两个操作数都为真,则结果为真”,即“两个条件都满足则结果为真”。
-
“或”(||):两个操作符的组合表示“如果两个操作数中至少有一个为真,则结果为真”,即“两个条件中至少有一个为真则结果为真”。
-
“非”(!):两个操作符的组合表示“如果操作数为假,则结果为真”,即“操作数为假则结果为真”。
-
“短路”(||=):如果操作数为假,那么两个操作符都会返回假,此时无需进行判断,直接返回结果。
条件表达式的结合方式如下:
-
如果第一个操作数为真,则第二个操作数返回真,然后执行第二个操作数,如果第二个操作数为真,则第一个操作数返回真,以此类推,直到第一个操作数为假。
-
如果第一个操作数为假,则第二个操作数返回假,然后执行第一个操作数,如果第一个操作数为假,则第二个操作数返回假,以此类推,直到第一个操作数为真。
-
如果两个操作数都为假,则直接返回假,因为在这种情况下,没有条件需要判断。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

