条件表达式运算符
C 具有一个三元运算符:conditional-expression 运算符 (? :
)。
语法
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
logical-OR-expression
必须具有整型类型、浮点型或指针类型。 根据其等效性,其计算结果为 0。 序列点紧跟 logical-OR-expression
。 操作数的计算将继续,如下所示:
如果
logical-OR-expression
不等于 0,则计算expression
。 由非终止符expression
给定的表达式的计算结果。 (这意味着,仅当logical-OR-expression
为 true 时计算expression
。)如果
logical-OR-expression
等于 0,则计算conditional-expression
。 该表达式的结果是conditional-expression
的值。 (这意味着,仅当logical-OR-expression
为 false 时计算conditional-expression
。)
结果是计算 expression
或 conditional-expression
,但不能同时计算两者。
条件运算的结果类型取决于 expression
或 conditional-expression
操作数的类型,如下所示:
如果
expression
或conditional-expression
具有整型类型或浮点型(其类型可不同),则运算符执行常用算术转换。 结果的类型是转换后操作数的类型。如果
expression
和conditional-expression
都具有相同的结构、联合或指针类型,则结果的类型为相同的结构、联合或指针类型。如果两个操作数都具有类型
void
,则结果具有类型void
。如果其中一个操作数是指向任何类型的对象的指针,且另一个操作数是指向
void
的指针,则指向对象的指针将转换为指向void
的指针,而结果是指向void
的指针。如果
expression
或conditional-expression
是指针,且另一个操作数是具有值 0 的常量表达式,则结果的类型为指针类型。
在指针的类型比较中,指针所指向的类型中的任何类型限定符(const
或 volatile
)都是不重要的,但结果类型从条件的两个组件继承了限定符。
示例
下面的示例演示条件运算符的用法:
j = ( i < 0 ) ? ( -i ) : ( i );
此示例将 i
的绝对值赋给 j
。 如果 i
小于 0,则将 -i
赋给 j
。 如果 i
大于或等于 0,则将 i
赋给 j
。
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
在此示例中,声明两个函数(f1
和 f2
)和两个变量(x
和 y
)。 如果两个变量具有相同的值,则稍后在程序中将调用函数 f1
。 否则,将调用 f2
。
请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈