- строковые литералы являются lvalues, но вы не можете их изменить
- rvalue, но если это указатель и не NULL, объект, на который он указывает, является lvalue
Стандарт C признает, что исходные термины означали слева и справа , как в L = R
; тем не менее, он говорит о том, что lvalue следует понимать как значение локатора , что примерно означает, что вы можете получить адрес объекта и, следовательно, этот объект имеет местоположение. (См. 6.3.2.1 в C99 .)
К тому же, стандарт отказался от термина rvalue и просто использует «значение выражения», которое представляет собой практически все, включая литералы, такие как int, char, float и т.д. с rvalue можно сделать и с lvalue, так что вы можете думать обо всех lvalue как о rvalue.