+ 3
Why it gives 12 12 10 ?
#include <stdio.h> int main() { int i=10; printf("%d\n%d\n%d",i,++i,i++); return 0; }
11 Answers
+ 2
Shubham Maske
As I said before, increment operators have right to left precedence so,
When pre increment is in use, then it will evaluate I and reserved this value for a temporary time, bcz it will be printed according to last value of I.
by pre increment the value of I will 21.
Now again pre increment so the value of I is 22
Bcz it's post increment then it will be printing 22 then increment the value of I by 1 and now it's 23
In the last one it's only I and I=23
Now it's time for printing the value of pre increment those we are having,
Put last value of I (23) in each of pre increment.
Final output:
23 22 23 23
(In case of GCC)
+ 11
While it gives 12 12 10 on sololearn code playground, it gives 10 10 11 in Cxxdroid. The documentation says that C/C++ doesn't guarantee the order in which the parameters are passed to a function(the parameter copying order). So it means that, maybe the ++i is passed first to the printf function, then i and then i++. Or the other way, we can't know which order the parameters are passed(copied to the function parameters). Different compilers give different results for this. The is called undefined behaviour. So it's advisable to say "don't make your program dependent on the order in which any function argument is passed". All the best =)
Edit:Tnx for the upvotes, I almost thought my answer is wrong =)
+ 5
Rellot's screwdriver I think you're not getting my point. I'll explain my point considering your example. You're calling foobar(2+3,1*2)
What I'm saying here is that it's not guaranteed that wheather 2+3 will be assigned to foo first and 1*2 assigned to bar second, or 1*2 to bar first or 2+3 to foo second. The order of assignment is unpredictable by the user. That's what I'm trying to say
+ 4
Rishi agree with you but according to GCC compiler it's 12 12 10 and i really don't know why it's 10 10 11 in cxxdroid.
+ 3
Rupali explain the output I got in Cxxdroid (mentioned in my answer above)
+ 3
Ok, then why below code give answer 23 22 23 23
#include <stdio.h>
int main() {
int i=20;
printf("%d\n%d\n%d\n%d",i,i++,++i,++i);
return 0;
}
+ 3
Rellot's screwdriver what do you think about this question? Is my answer wrong here?
+ 2
In C, precedence of increment operator is right to left so, from right it will print 10and then increment the value of I by 1 bcz it's post increment,then now the value of I is 11 and in next it will first increment the value of i by 1 and then it will be printed (11+1=12) and in last one once again 12 will be printed bcz you're not performing any operation here, the value of I is 12 now.
Final output 12 12 10
+ 2
Rupali
Yes got it ,thank you
+ 1
Compiler starts from right to left (turbo c/cpp compiler)
So 12 12 10