Not able to understand error condition wrt lvalues

送分小仙女□ 提交于 2019-12-02 04:32:08

问题


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.


回答1:


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.




回答2:


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



回答3:


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



来源:https://stackoverflow.com/questions/24471063/not-able-to-understand-error-condition-wrt-lvalues

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!