+ 1
Why is the output 1 2 4 3?
#include <stdio.h> int glob; int eflat(int n) { glob=glob+1; return glob; } int main(void) { glob=0; printf("%d ",eflat(0)); printf("%d\n",eflat(0)); printf("%d %d\n", eflat(0),eflat(0)); return 0; } I don't understand why when I call the function in the same printf the output is 4 3. I won't supposed to be 3 4?
2 ответов
+ 3
For this you need to know the concept of stack. A stack is a container of objects that are inserted and removed according to the last-in first-out (LIFO) principle.
Now coming to your question:
After executing
printf ("%d", eflat(0));
printf ("%d", eflat(0));
we know the value of glob is 2.
the confusion is with this line.
printf("%d %d", eflat(0), eflat(0));
| eflat(0) |=> glob = glob + 1 = 3 + 1 = (4)
--------------
| eflat(0) |=> glob = glob + 1 = 2 + 1 = (3)
--------------
| main() |
--------------
Looking at the diagram above we are sure using stack of dealing with data (4) will come first or pop and printed and then (3) will be printed
this is the reason why output is
1 2
4 3
+ 2
Test on C4Droid and rextester.com (C - clang) outputs
1 2
3 4
Looks like compiler specifics (gcc).