Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выражения, которые ссылаются на адреса памяти, называются выражениями l-значения. L-значение представляет значение locator или left области хранения, что означает, что оно может отображаться слева от знака равенства (=). L-значения часто являются идентификаторами.
Выражения, ссылающиеся на изменяемые расположения, называются "изменяемыми l-значениями". Изменяемое значение l-value не может иметь тип массива, неполный тип или тип с атрибутом const . Чтобы структуры и объединения были изменяемыми l-значениями, они не должны содержать элементы с атрибутом const. Имя идентификатора обозначает место хранения, а значение переменной является значением, хранящимся в этом месте.
Идентификатор является изменяемым l-значением, если он ссылается на адрес памяти и если он принадлежит арифметическому типу, типу структуры, объединения или указателя. Например, если ptr — указатель на область хранения, то *ptr будет изменяемым l-значением, которое обозначает область хранения, на которую указывает ptr.
Любое из следующих выражений C может быть выражением l-значения.
Идентификатор целочисленного типа, типа указателя, структуры или объединения.
Подстрочный
[ ]() выражение, которое не оценивается в массивеВыражение выбора элементов (
->или.)Унарное непрямое
*() выражение, не ссылающееся на массивВыражение l-значения в скобках.
Объект
const(неизменяемое l-значение).
Термин "r-значение" иногда используется, чтобы описать значение выражения и отличить его от l-значения. Все l-значения являются r-значениями, но не все r-значения являются l-значениями.
Блок, относящийся только к системам Майкрософт
Microsoft C включает расширение к стандарту ANSI C, которое позволяет использовать приведение l-значений в качестве l-значений, если размер объекта не продлен через приведение. Дополнительные сведения см. в разделе Type-Cast Преобразования. В следующем примере показана эта функция:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
В Microsoft C расширения Microsoft по умолчанию включены. Используйте параметр компилятора /Za для отключения этих расширений.
Завершение блока, относящегося только к системам Майкрософт