954,505 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

i=i++

Can somebody give me the reason why the integer i is not getting incremented.
Here is the code:

main()
{
int i=10;
i=i++;
printf("%d",i);
}

and the output is 10.

Here my doubt is that, i know that i is post incremented. Eventhough i is not incremented at the time of assignment, i should get incremented after that instruction(post incrementation) ie the printf statement should print the incremented value as in the below example

{
int i=j=10;
i=j++;
printf("%d %d",i,j);
}

here the output is 10 11. and i kno the reason that i gets the value before the increment and j is incremented(post incremented) after the completion of the instruction.
My question is y the same thing is not happening in the previous example

Waiting for your valuble explanations..
Thanks

mailsteam
Newbie Poster
8 posts since Jan 2007
Reputation Points: 10
Solved Threads: 0
 

That's because of the way post-increment works.. it's implemneted something like this:

int operator++(int a) //post increment (i++)
{
     int tmp = a ; //where "a" is the variable you're incrementing
     a = a + 1 ;
     return tmp ;
}

int operator++(void) //pre increment (++i)
{
     //this is only an example..
     //where "this" is the pointer to the variable you're incrementing
     *this = *this + 1 ;
     return *this ;
}

int main()
{
   int i = 10 ;
   i = i++ ;
   //when post increment operator is called it increments i
   //but >>returns the original<< value viz 10.
   //AFTER the increment assignment happens, so i is reset to 10.
   printf("%d\n", i) ; //will print 10

   i = ++i ;
   //when pre increment operator is called it increments i
   //and >>returns the incremented<< value viz 11.
   printf("%d\n", i) ; //will print 11
    return 0 ;
}
thekashyap
Practically a Posting Shark
811 posts since Feb 2007
Reputation Points: 254
Solved Threads: 75
 

When you use a variable twice in an expression and one of those instances is a pre- or post- increment, the behavior is undefined (and then depends on how it's implemented by your compiler).

Infarction
Posting Virtuoso
1,580 posts since May 2006
Reputation Points: 683
Solved Threads: 53
 
andor
Posting Whiz in Training
276 posts since Jun 2005
Reputation Points: 251
Solved Threads: 29
 

++i and i++ are all 11 in .net

deng_cen
Newbie Poster
14 posts since Apr 2007
Reputation Points: 30
Solved Threads: 4
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You