客观c中的LValues和RValues是什么?

时间:2014-08-26 07:27:38

标签: objective-c lvalue rvalue

Objective-C

中有两种表达方式

1。 RValue

 The term rvalue refers to a data value that is stored at some address in memory

2。左值

Expressions that refer to a memory location is called "lvalue" expression. An lvalue may appear as either the left-hand or right-hand side of an assignment

我没理解。有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

RValue是一个被评估的值,但在分配给这样的内存位置之前没有指定的内存地址存储。例如:

5 * 2是一个评估为10的表达式。此计算表达式仍未分配给内存地址(仅用于计算的临时表达式,但您无法直接引用它),如果未存储则将丢失。这是LValue的作用,它提供了一个存储评估表达式的内存位置:

int x;
x = 5 * 2;

此处x指的是某个内存地址,现在可以将计算出的数字(10)存储在x所指的位置(即分配给x的内存空间中)赋值运算符。因此,在上面的示例中,x是LValue,表达式5 * 2是RValue

答案 1 :(得分:0)

粗略地说,lvalue是可以分配给的值。在C和Objective-C中,这些通常是变量和指针解引用。 rvalue是无法分配的表达式的结果。

一些例子:

int i = 0;
int j = 1;
int *ptr = &i;

// "i" is a lvalue, "1" is a rvalue
i = 1;
// "*ptr" is a lvalue, "j + 1" is a rvalue
*ptr = j + 1;
// lvalues can be used on both sides of assignment
i = j;

// invalid, since "j + 1" is not a rvalue
(j + 1) = 2

有关详细信息,请参阅Wikipedia articlethis article here