§ 6.3.2.1:2 ISO / IEC 9899: 2011, то есть «стандарт ISO C11», гласит:
2 За исключением случаев, когда это операнд оператора sizeof
,унарный оператор &
, оператор ++
, оператор --
или левый операнд оператора .
или оператор присваивания, lvalue, у которого нет типа массива, преобразуется в значение, сохраненное вобозначенный объект (и больше не является lvalue);это называется преобразованием lvalue.Если lvalue имеет квалифицированный тип, значение имеет неквалифицированную версию типа lvalue;кроме того, если lvalue имеет атомарный тип, значение имеет неатомарную версию типа lvalue;в противном случае значение имеет тип lvalue.Если lvalue имеет неполный тип и не имеет типа массива, поведение не определено.Если lvalue обозначает объект с автоматической продолжительностью хранения, который мог быть объявлен с помощью класса хранения регистра (никогда не было взято его адрес), и этот объект не был инициализирован (не объявлен с помощью инициализатора и никакое присвоение ему не было выполнено до использования), поведение не определено.
Но не является ли разыменованный указатель также lvalue, как и сам указатель?Например, int *ptr; ptr = malloc(…); *ptr = 1
Так почему же не указан оператор *
- или я что-то здесь путаю?