Thanks George, your explaination is already good. I now understand what they are.
Thanks.

George Madrid wrote:

> An lvalue is anything that can *legally* appear on the left hand side of an
> assignment.  What this means is that the value corresponds to a variable
> with real memory set aside for storing it.  The alter-ego of the lvalue is
> the rvalue.  An rvalue is an legal value for the right side of an
> assignment.  In general, any expression that may be used as an lvalue may be
> used as an rvalue, but not vice-versa.
>
> Some examples:
>
>     int i, j, k;
>     int *ip, *jp;
>
>     i = j;    // i is lvalue, j is rvalue
>     j = 2;    // j is lvalue, 2 is rvalue
>               // note that j is used both as lvalue and rvalue.
>     2 = i;    // ILLEGAL:  2 has no memory associated with it, and cannot
>               // be assigned to.
>
>     i = j + k;      // i is lvalue, j + k is rvalue
>     ip = &i;        // ip is lvalue, &i is rvalue
>     jp = ip;        // jp is lvalue, jp is rvalue
>     &i = j;         // ILLEGAL: &i is not an lvalue
>     *ip = 2;        // *ip is a legal lvalue
>     *ip = *jp;      // legal
>
> If you understand the last three, then you probably have a good handle on
> this topic.  &i is not a real variable.  You cannot set the address of a
> variable.  &j causes the compiler to generate certain constants (probably an
> offset into the stack) and constants cannot be changed.
>
> On the other hand, *ip is an lvalue and can be assigned.  This is almost by
> definition.  Since ip is a ptr to memory, then you can change the contents
> of that memory.  You do that by assigning to *ip.
>
> If you have casts on the left side of the assignment, that could mess you
> up, too.  Until you really understand what's going on, I recommend that you
> avoid casts on the left side.
>
> I suggest that you pick up a *good* book on C or C++.  The authors will be
> much more lucid and have many more examples than I have been able to here.
>
> Good luck,
>
> George
>
> > From: "Joe Wronski" <[EMAIL PROTECTED]>
> > Reply-To: [EMAIL PROTECTED]
> > Date: Wed, 17 Nov 1999 06:16:25 -0500
> > To: <[EMAIL PROTECTED]>
> > Subject: RE: simple programming question
> >
> > An lvalue is just what it says it is.  The left side of an assignment
> > statement.  Sometimes it happens when the variable has the same name as a
> > defined macro.  This happens quite a bit with simple, case-insensitive
> > compilers, or when you have long variable names that are internally
> > truncated making it non-ambiguous.
> >
> > Joe W.
> >
> >> -----Original Message-----
> >> From: Palm Dev Forum [mailto:[EMAIL PROTECTED]]
> >> Sent: Tuesday, November 16, 1999 6:08 PM
> >> To: [EMAIL PROTECTED]
> >> Subject: simple programming question
> >>
> >>
> >> Sometimes I try to compile and get an error where the compiler
> >> tells me that
> >> my variable is not a "lvalue".  Most of the time I just mess
> >> around with it
> >> until it goes away but I think I would be better off if I fully understood
> >> what was going on.  Could someone please help me out?
> >>
> >> Thanks.
> >>
> >>
> >>
> >

Reply via email to