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. 188.8.131.52
Rationale Sec. 184.108.40.206
H&S Sec. 7.1 p. 179