Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
C имеет один тернарный оператор: оператор условного выражения (? :).
Синтаксис
conditional-expression:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
Должен logical-OR-expression иметь целочисленный, плавающий или указательный тип. Он оценивается с точки зрения его эквивалентности 0. Следующая точка logical-OR-expressionпоследовательности. Оценка операндов продолжается следующим образом:
Если
logical-OR-expressionзначение равно 0,expressionвычисляется. Результат оценки выражения определяется нетерминальнымexpression. (Это означаетexpression, что вычисляется только в том случае, еслиlogical-OR-expressionзначение true.)Если
logical-OR-expressionравно 0,conditional-expressionвычисляется. Результат выражения — значениеconditional-expression. (Это означаетconditional-expression, что вычисляется только в том случае, еслиlogical-OR-expressionимеет значение false.)
Эффект либо вычисляется, expressionconditional-expression но не оба.
Тип результата условной операции зависит от типа expression или conditional-expression операнда, как показано ниже.
Если
expressionилиconditional-expressionимеет целочисленный или плавающий тип (их типы могут отличаться), оператор выполняет обычное арифметическое преобразование. Тип результата — это тип операндов после преобразования.Если оба
expressionтипа иconditional-expressionимеют одну и ту же структуру, объединение или тип указателя, тип результата совпадает со структурой, объединением или типом указателя.Если оба операнда имеют тип
void, результат имеет типvoid.Если любой операнд является указателем на объект любого типа, а другой операнда —
voidуказатель на, указатель на объект преобразуется в указательvoid, а результат — указательvoidна .Если указатель
expressionconditional-expressionили является указателем, а другой операндом является константным выражением со значением 0, тип результата является типом указателя.
В сравнении типов для указателей все квалификаторы типов (const или volatile) в типе, к которому точки указателя являются незначительными, но тип результата наследует квалификаторы от обоих компонентов условного.
Примеры
В следующих примерах показано использование условного оператора:
j = ( i < 0 ) ? ( -i ) : ( i );
В этом примере присваивается абсолютное значение ij. Если i значение меньше 0, -i назначается j. Если i значение больше или равно 0, i назначается j.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
В этом примере объявляются две функции и f2f1 две переменные, x а также yдве переменные. Далее в программе, если две переменные имеют одно и то же значение, вызывается функция f1 .
f2 В противном случае вызывается.