Hi,
Although the expression *((a<20)?&b:&c)=30; works but
((a<20)?b:c)=30 gives
error: invalid lvalue in assignment.
what could be the reason for it? Please need sum urgent help.
Thanks in advance.
Hi,
Although the expression *((a<20)?&b:&c)=30; works but
((a<20)?b:c)=30 gives
error: invalid lvalue in assignment.
what could be the reason for it? Please need sum urgent help.
Thanks in advance.
The result of the left hand side of:
is a value (the value stored in either b or c). Let's say for example that b is 20 and c is 30. If a is 10 then the result of the left-hand side is 20 and you are effectively trying to say:Code:((a<20)?b:c)=30
which would of course give you that error.Code:20=30
"Owners of dogs will have noticed that, if you provide them with food and water and shelter and affection, they will think you are god. Whereas owners of cats are compelled to realize that, if you provide them with food and water and shelter and affection, they draw the conclusion that they are gods."
-Christopher Hitchens
full program:
this also gives error invalid lvalue in assignment.Code:main() { int a=10,b,c; ((a<20)?b:c)=30; printf("%d",b); }
but if i replace the line with *((a<20)?&b:&c)=30; it works.
please explain also why the second one works .
You are assigning to what the corresponding pointer points to, and that is not a problem. Where did you come across this code, anyway? It looks like a lazy hack, or rather, bad style.Originally Posted by lazy_hack
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
HOPE YOU UNDERSTAND.......
By associating with wise people you will become wise yourself
It's fine to celebrate success but it is more important to heed the lessons of failure
We've got to put a lot of money into changing behavior
PC specifications- 512MB RAM, Windows XP sp3, 2.79 GHz pentium D.
IDE- Microsoft Visual Studio 2008 Express Edition
That is off the mark. That b and c were not initialised does not matter, since the intention is to assign a value to them. What matters is that the result of the conditional operator is not an lvalue, hence the attempted assignment does not work.Originally Posted by BEN10
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
I think hk_mp5kpdw's post is also wrong then.
HOPE YOU UNDERSTAND.......
By associating with wise people you will become wise yourself
It's fine to celebrate success but it is more important to heed the lessons of failure
We've got to put a lot of money into changing behavior
PC specifications- 512MB RAM, Windows XP sp3, 2.79 GHz pentium D.
IDE- Microsoft Visual Studio 2008 Express Edition
What do you find wrong about it? hk_mp5kpdw made the point that the result of the conditional operator is not a variable that can be assigned to, but a value that cannot be assigned to.Originally Posted by BEN10
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
From hk_mp5kpdw's post, let b has a value of 12345 in the code given by the OP, then this will happen
That's why the error. This is what I said in my previous post.Code:12345=30;
HOPE YOU UNDERSTAND.......
By associating with wise people you will become wise yourself
It's fine to celebrate success but it is more important to heed the lessons of failure
We've got to put a lot of money into changing behavior
PC specifications- 512MB RAM, Windows XP sp3, 2.79 GHz pentium D.
IDE- Microsoft Visual Studio 2008 Express Edition
Fair enough: looking at your post #5 again, I see that I missed the phrase "as told to you in post#2". It would have been clearer if you had given an example there and then, or at least suggested the scenario where 20 and 30 were the "garbage" values of b and c respectively.Originally Posted by BEN10
Look up a C++ Reference and learn How To Ask Questions The Smart WayOriginally Posted by Bjarne Stroustrup (2000-10-14)
thanks for the explanation...
"the result of the conditional operator is not an lvalue" line is the crux i believe...
the code was from test ur c skills book....just anther intrsting book..