I am a beginner in programming and was trying out some combinations.
#include<stdio.h>
int main()
{
int a=5;
printf("%d",&a); // STATEMENT 1
printf("\n%d",a); //STATEMENT 2
printf("\n%d",&(a++)); //STATEMENT 3
printf("\n%d",a); //STATEMENT 4
return 0;
}
I get a error in STATEMENT 3 saying
[Error] lvalue required as unary '&' operand
I expected the output of STATEMENT 1 & 3 to be same as both address are the same.
Also I expected the output of STATEMENT 2 to be 5 & STATEMENT 4 to be 6.
I looked up and found a similar question : Lvalue required error
I understood the issue in that question.From the comments to the first answer to above mentioned question I see lvalue as something to which something can be stored.
But I still can't understand why &(a++) or &(++a) should give an error. Any help will be appreciated.
Thank You for reading this.
[Edit] Thank you for answering. If possible please include references where the exact sequence of execution or nature of such expressions are discussed. That way rookies like me won't trouble the community with such trivial questions.
a++
and++a
and&
all three of them needs lvalue to operate on and when operated they return the rvalueSo when you do &(a++)
For this similar reason you can't perform any of these:
a++
increments youra
and returns the old value ofa
. The&
operator returns the address of a variable. But the returned old value ofa
doesn't have an address. It's a very temporary thing, not an lvalue. That's why you can not take the address of it.a++, as you may know, returns a temporary with the value of a prior to incrementation. And you can't take the address of a temporary for the rather good reason that it'll die at the end of its expression (and thus before you manage to do anything with it).