I am a beginner in programming and was trying out some combinations.
#include
int main()
{
int a=5;
printf(\"%d\",&a); // STATEMENT 1
print
a++
increments your a
and returns the old value of a
. The &
operator returns the address of a variable. But the returned old value of a
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).
a++
and ++a
and &
all three of them needs lvalue to operate on and when operated they return the rvalue
So when you do &(a++)
First, (a++) is performed -> a is taken as lvalue and (a++) returns rvalue
Second, &(a++) is performed -> a++ returns rvalue but & needs lvalue so lvalue is
missing,therefore an error.
For this similar reason you can't perform any of these:
++(a++) : lvalue missing
(++a)++ : lvalue missing
a++++ : lvalue missing
++++a : lvalue missing