Not able to understand error condition wrt lvalues

前端 未结 3 634
小蘑菇
小蘑菇 2021-01-22 02:05

I am a beginner in programming and was trying out some combinations.

#include


int main()
{
int a=5;

printf(\"%d\",&a); // STATEMENT 1
print         


        
相关标签:
3条回答
  • 2021-01-22 02:17

    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.

    0 讨论(0)
  • 2021-01-22 02:21

    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).

    0 讨论(0)
  • 2021-01-22 02:26

    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
    
    0 讨论(0)
提交回复
热议问题