Q: How can an array be an lvalue, if you can't assign to it?
A: The term ``lvalue'' doesn't quite mean ``something you can assign to''; a better definition is ``something that has a location (in memory).'' [footnote] The ANSI/ISO C Standard goes on to define a ``modifiable lvalue''; an array is not a modifiable lvalue. See also question 6.5.
ISO Sec. 18.104.22.168
Rationale Sec. 22.214.171.124
H&S Sec. 7.1 p. 179