I am quite new to C and preparing for a test by working through some sample questions.
Given the code below, I don’t understand the initialization of int j by using the ternary operator.
for (int j = i ? foo : 2; j < 10; j++)
#include <stdio.h>
int main (void) {
int foo = -1;
do {
int i = foo++;
if (foo > 8)
break;
else if (foo < 5)
continue;
for (int j = i ? foo : 2; j < 10; j++) {
printf("foo=%d, i=%d, j=%d;", foo, i, j);
}
i = foo++;
} while (1);
return foo;
return 0;
}
The results I got from debugging:
- During cycle 6 of the do-while loop, the for loop will be entered for the first time. At this time the values are: i=4, foo=5 and j=0 (according to the debugger, although it was never initialized with the value 0?)
- When stepping over j changes from 0 to 5 (=foo) – and this change, I don’t understand.
So my questions would be:
- How does this "ternary initialization work"?
- Why is int j = 0 without being initialized before? Shouldn’t it be some random numbers?
>Solution :
How does this "ternary initialization work"?
j
is being initialized with the value of the expression i ? foo : 2
. Since i
has a non-zero value (4), the second part of the ternary is evaluated, i.e. foo
which is 5, and that value is what j
is initialized with.
Why is int j = 0 without being initialized before? Shouldn’t it be some random numbers?
0 is a random number. There’s no particular reason it had to be this value.