Hi everyone,
I am a beginner of C and am stuck on a problem like below
int i=3, j, k;
j = i++*i++;
k = ++i*++i;
print ("j=%d k=%d", j, k);
As per my calculations the values should be j=12 and k=42 but the value of the code turns out to be j=9 and k=49. I don't understand why it happens. Can anyone explain the reason.
Thanks for any Help
|
Go4Expert Member
|
|
| 21Nov2010,19:29 | #2 |
|
Just play a bit with operators and you will find out how to use to obtain correct result.
|
|
Ambitious contributor
|
|
| 21Nov2010,19:58 | #3 |
|
Light Poster
|
|
| 21Nov2010,20:22 | #4 |
|
Quote:
Originally Posted by ihatec the compiler first evaluates the expression j = i++*i++ and then increments i 2 times in a row and opposite for ++i means there it first increments i 2 times in a row and then evaluates the exp k = ++i*++i Thanks |
|
Light Poster
|
|
| 21Nov2010,20:27 | #5 |
|
Mentor
|
![]() |
| 22Nov2010,13:45 | #6 |
|
Quote:
Originally Posted by crazyNut So i=3; j=i++ * i++; could mean j=i(3, post incremented to 4) * i(4, post incremented to 5)=12, OR it could mean j=i*i(post incremented twice to 5)=9. The result is compiler dependent. In Visual Studio j=i++*i++; is equivalent to j=i*i; i++; i++; but you cannot guarantee this for all compilers (or even all versions of Visual Studio). The end result of this is that if you only need a variable once in an expression, it's safe to use modifiers, but if you need it more than once, use it WITHOUT pre/post increment/decrement within the expression, THEN modify it. By the way, this is a very frequently asked question. Check out stuff like the C++ FAQ before asking anything else. It will almost certainly answer your next 20 questions, plus there will be a load of other interesting stuff in there, so it's well worth a read. |


