左值和R值表达式

引用内存位置的表达式称为 “左值”表达式。 左值表示内存块的 “定位器”值或 “left”值,则暗示在等号 (=) 的左侧,则会出现。 左值通常是标识符。

引用可修改的位置的表达式称为 “可修改的左值”。一个可修改的左值不能有一个数组类型、一个不完整类型或一个类型与 const 属性。 为使结构和的联合可以修改的左值,所以不能具有 const 属性的成员。 ,而变量的值是值存储在该位置,标识符的名称表示存储位置。

标识符是一个可修改的左值,如果它是引用内存位置,并且,如果其类型是算术的,结构、联合或指针。 例如,因此,如果 ptr 是指向内存块,然后 *ptr 是指定内存块 ptr 点的一个可修改的左值。

下面的 C 表达式中的任何一个可以是左值:

  • 集成,浮点数,指针、结构或联合类型标识符

  • 不会计算为数组的一个编写在下方的 ([]) 表达式

  • 成员选择表达式 (– AMP_GT.)

  • 不引用数组中的一元间接寻址 (*) 表达式

  • 括号内左值表达式

  • const 对象 (一个不能更改的左值)

该术语 “r 值”有时用于描述表达式的值与左值区分开。 所有左值是 r 值,而不是所有的 r 值是左值。

Microsoft 专用

Microsoft C 包含一个扩展为允许左值转换用作左值的 ANSI C 标准,,只要对象的大小没有将转换项。 (请参见 转换转换 有关更多信息。)下面的示例阐释了这一功能:

char *p ;
short  i;
long l;

(long *) p = &l ;       /* Legal cast   */
(long) i = l ;          /* Illegal cast */

Microsoft C 的默认值为 Microsoft 扩展启用。 使用 /Za 编译器选项来禁用这些扩展。

特定于 Microsoft 的结尾

请参见

概念

操作数和表达式