Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
C har en ternary-operator: operatorn för villkorsuttryck (? :).
Syntax
conditional-expression:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
logical-OR-expression Måste ha en integrerad, flytande eller pekartyp. Det utvärderas i termer av dess motsvarighet till 0. En sekvenspunkt följer logical-OR-expression. Utvärderingen av operanderna fortsätter enligt följande:
Om
logical-OR-expressioninte är lika med 0expressionutvärderas. Resultatet av utvärderingen av uttrycket ges av den icke-terminalaexpression. (Det innebär attexpressionendast utvärderas omlogical-OR-expressionär sant.)Om
logical-OR-expressionär lika med 0conditional-expressionutvärderas. Resultatet av uttrycket är värdet förconditional-expression. (Det innebär attconditional-expressionendast utvärderas omlogical-OR-expressiondet är falskt.)
Effekten är antingen expression eller conditional-expression utvärderas, men inte båda.
Typen av resultat av en villkorsstyrd åtgärd beror på typen av expression eller conditional-expression operanden, enligt följande:
Om
expressionellerconditional-expressionhar en integrerad eller flytande typ (deras typer kan vara olika) utför operatorn de vanliga aritmetiska konverteringarna. Typen av resultat är typen av operander efter konverteringen.Om både
expressionochconditional-expressionhar samma struktur, union eller pekartyp är typen av resultat samma struktur, union eller pekartyp.Om båda operanderna har typen
voidhar resultatet typenvoid.Om någon av operanderna är en pekare till ett objekt av någon typ och den andra operanden är en pekare till
voidkonverteras pekaren till en pekare tillvoidoch resultatet är en pekare tillvoid.Om antingen
expressionellerconditional-expressionär en pekare och den andra operanden är ett konstant uttryck med värdet 0, är typen av resultat pekartypen.
I typjämförelsen för pekare ärver alla typer av kvalificerare (const eller volatile) i den typ som pekarpunkterna är obetydliga till, men resultattypen ärver kvalificerarna från båda komponenterna i villkoret.
Exempel
I följande exempel visas användning av den villkorsstyrda operatorn:
j = ( i < 0 ) ? ( -i ) : ( i );
I det här exemplet tilldelas det absoluta värdet i för till j. Om i är mindre än 0 -i tilldelas till j. Om i är större än eller lika med 0 i tilldelas till j.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
I det här exemplet deklareras två funktioner, f1 och f2, och två variabler, x och y. Senare i programmet anropas funktionen f1 om de två variablerna har samma värde. Annars f2 anropas.