Sometimes, you'll have a scenario with two variables, and you need to use one of them based on a simple test. Rather than a long and awkward if / else
statement, C allows the use of the ? :
form. It is perfectly acceptable to write:
int i,j,k,l;
...
i = (j > 5? k : l)
which will set i
to k
if j
is greater than 5, and l
otherwise.
Another common use is [sf]?printf
statements:
printf("The test %s\n",(status == OK) ? "passed" : "failed");
However, one can't use it to handle selective assignments. The following code is illegal:
int i,j,k;
...
((i>5) ? j : k) = 5;
This cannot be used to choose whether j
or k
is set to 5.
There is, however a way this can be done. Using pointer, we can select which one to deference:
*((i>5) ? &j : &k) = 5;
This will work.