Each expression in C (an operator with its arguments, a function call, a constant, a variable name, etc) is characterized by two independent properties: a type and a value category.
Every expression belongs to one of three primary categories: lvalues, function designators, and non-lvalue object expressions (rvalues).
Lvalue expressions
Lvalue expression is any expression with object type other than the type void, which potentially designates an object (the behavior is undefined if an lvalue