Somebody explained the lvalue error like this:
An "lvalue" is something that can have the result of any computation assigned to it - it's pretty much some location in memory where you can put values. The statement "int abc;" declares and integer variable "abc", which can be an lvalue.
The address of abc - "&abc" - is not an lvalue, because you can't assign a result to that - the address of the variable is the address. You can assign something to where that address points to by using the "*" operator, so "*( &abc )" is actually an lvalue. The integer constant "3" is not an lvalue.