c语言里(?:)的结合性是怎样的?

如题所述

第1个回答  2022-10-21
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
解析:

2.11 条件表达式

语句

if (a > b)

z = a;

else

z = b;

计算a和b的最大值存入z。用三重操作符书写的条件表达式``?:'',提供了另一种可选择的方法和相似的构造。表达式

expr1 ? expr2 : expr3

首先计算表达式expr1。如果它非0(真),那么计算表达式expr2,而这就是条件表达式的值。否则计算expr3,而它就是该值。仅计算expr2和expr3中的一个。所以为使z为a和b的最大值,令

z = (a > b) ? a : b; /* z = max(a, b) */

应该注意,条件表达式实际上是一个表达式,它可以用在其它类型表达式可以使用的任何地方。如果expr2和expr3具有不同类型,结果的类型由这一章中早些讨论的转换规则决定。例如,如果f是float并且n是int,那么表达式

(n > 0) ? f : n

是float类型,无论n是否为正数。

条件表达式中第一个表达式的括号不是必须的,因为?的优先级很低,只高于赋值符号。但是建议使用括号,因为它们能增强表达式条件部分的可读性。

条件表达式通常导致简洁的代码。例如,这个循环打印数组中的n个元素,每行10个,每一列之间用空格分开,并且每一行(包括最后一行)的末尾由一个换行符结束。

for (i = 0; i < n; i++)

printf("%6d%c", a[i], (i%10==9 || i==n-1) ? '\n' : ' ');

每十个元素、并且第n个元素后打印换行符。所有其它元素后面是一个空白符。这可能看上去很富技巧性,但是却比等价的if-else更紧凑。另一个好的例子是

printf("You have %d item%s.\n", n, n==1 ? "" : "s");

c语言里(?:)的结合性是怎样的?
printf("%6d%c", a[i], (i%10==9 || i==n-1) ? '\\n' : ' ');每十个元素、并且第n个元素后打印换行符。所有其它元素后面是一个空白符。这可能看上去很富技巧性,但是却比等价的if-else更紧凑。另一个好的例子是 printf("You have %d item%s.\\n", n, n==1 ? "" : "s"...

C语言中条件预算符的结合方向如何?
a?b:c?d:e 这个要怎么算?先看优先级,两个一样。再看结合性,右结合,所以:先算c?d:e 再算 a?b:(c?d:e) 这就是所谓右结合。如果是左结合的话 就是先算a?b:c 不知道你明白了没有。另外,并非只有=是右结合的 c语言书后都有,结合性和优先级如下:优先级 运算符 结合性...

c语言中条件运算 结合方向 从右到左 什么意思
c : b),之后算c>b,结果为0,\/\/ 3、所以最后结果为b的值,也即等于3\/\/ 如果是从左到右的结合顺序,那么该表达式等价于d =((a>b ? a : c>b) ? c : b);\/\/计算过程:\/\/ 1、先算a>b,结果为0;\/\/ 2、再算c>b,结果为0;\/\/ 3、所以d=b,结果为b的值,也即等于3 ps:...

C语言中各运算符的结合性分为哪几种?
左结合性:自左至右。右结合性:自右至左。一个运算量两侧的运算符优先级相同时,按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性和右结合性。如,算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后...

C语言结合性
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与"-"号结合, 执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为"左结合性"。而自右至左的结合方向称为"右...

c语言中条件表达式的运算顺序不应该是自左向右吗?为什么a
在C语言中,条件表达式的运算顺序并非自左向右。首先,要理解关系运算符<的优先级高于逻辑运算符?。其次,逻辑运算符?:的结合性是右结合的。这意味着在条件表达式中,先从右向左进行计算。具体来说,对于表达式`a ? b : c`,首先计算`a`的值。若`a`非零(即为真),则整个表达式的值为`b`...

C语言中 怎样理解三目运算符(条件运算符)的右结合性??
说白了,也就是只有两种可能性:可能性1:先算(--a == b++),再算(a++);可能性2:先算(--a == b++),再算(b++)。至于(--a == b++)中到底是先算--a 还是b++则仅从C语言这个角度是无法判别的,这是个实现问题,如果要想写出健壮的可移植的代码就应该避免这种表述。总结一下...

C语言中,逗号运算符和条件运算符还有单目运算符有没有结合性?
C语言中,逗号运算符和条件运算符还有单目运算符是有结合性的,逗号运算符 左结合性 条件运算符 右结合性 单目运算符:++、--、+(正)-(负)、*、&、! 右结合性

C语言 运算符的结合性 怎么理解 举例说明拜托各位大神
C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。 详见 http:\/\/baike.baidu.com\/view\/1516130.htm#2 哪里不懂再追问

C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了...
运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。而自右至...

相似回答
大家正在搜