左值和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 的结尾