我们在看书的时候,经常可以看到关于 左值(L-value) 和 右值(R-value) 的概念,那么到底什么是左值,什么是右值,它们之间的区别又是在哪里呢?
通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。
举个很简单的例子:
a=b+100;
那么这里a就是左值,b+25就是一个右值。左值和右值之间是不一定都能互换的,上面的这个例子就是不能互换的,如果写成
b+100=a;
#include<stdio.h>
void main()
{
int a=1;
int b;
b+100=a;
printf("%d\n",a);
}
大家都能看出来这样写会不编译通过的,因为编译器无法判断b+100的内存地址,所以不能操作。
看了这个例子,可以做一个总结,左值必须应该是一个变量或者是表达式等,但是它的物理位置是可以确定的,而右值不一定,这也是它们两者之间的区别。
关于左值是表达式的例子有数组,还有指针这些都可以。
int array[10];
int a=5;
array[a+3]=10; //这里左值就是一个数组表达式了
此文完。
另外:liotta朋友给了一些其他方面的提示 (左值右值翻译可能有些问题)
错了,没有什么左值和右值!
翻译害人不浅,
L-value中的L指的是Location,表示可寻址。The "l" in lvalue can be though of as location
R-value中的R指的是Read,表示可读。The "r" in rvalue can be thought of as "read" value.
翻译害人不浅,
L-value中的L指的是Location,表示可寻址。The "l" in lvalue can be though of as location
R-value中的R指的是Read,表示可读。The "r" in rvalue can be thought of as "read" value.
为什么自增(减)运算只能用于左值,不能用于右值,即表达式++(a++)为什么错误呢
From Wikipedia, the free encyclopedia
Jump to: navigation, search
L-value or L value may refer to:
A value (computer science) that has an address
The value assigned to an L-shell, a particular set of planetary magnetic field lines
A measure of brightness of a lunar eclipse on the Danjon scale
From Wikipedia, the free encyclopedia
Jump to: navigation, search
R-value can refer to:
Properties of materials:
R-value (insulation), the efficiency of insulation
R-value (soils), stability of soils and aggregates for pavement construction
r-value, in computer science, a value that does not have an address in a computer language
R-factor (crystallography), a measure of the agreement between the crystallographic model and the diffraction data
In statistics, r (or r value) refers to the Pearson product-moment correlation coefficient, often called simply correlation coefficient
翻译不对,谢谢 回复 更多评论
Jump to: navigation, search
L-value or L value may refer to:
A value (computer science) that has an address
The value assigned to an L-shell, a particular set of planetary magnetic field lines
A measure of brightness of a lunar eclipse on the Danjon scale
From Wikipedia, the free encyclopedia
Jump to: navigation, search
R-value can refer to:
Properties of materials:
R-value (insulation), the efficiency of insulation
R-value (soils), stability of soils and aggregates for pavement construction
r-value, in computer science, a value that does not have an address in a computer language
R-factor (crystallography), a measure of the agreement between the crystallographic model and the diffraction data
In statistics, r (or r value) refers to the Pearson product-moment correlation coefficient, often called simply correlation coefficient
翻译不对,谢谢 回复 更多评论
这是<C++ primmer>中的一部分:
Lvalues and Rvalues
左值和右值
We'll have more to say about expressions in Chapter 5, but for now it is useful to know that there are two kinds of expressions in C++:
我们在第五章再详细探讨表达式,现在先介绍 C++ 的两种表达式:
lvalue (pronounced "ell-value"): An expression that is an lvalue may appear as either the left-hand or right-hand side of an assignment.
左值(发音为 ell-value):左值可以出现在赋值语句的左边或右边。
rvalue (pronounced "are-value"): An expression that is an rvalue may appear on the right- but not left-hand side of an assignment.
右值(发音为 are-value):右值只能出现在赋值的右边,不能出现在赋值语句的左边。
Variables are lvalues and so may appear on the left-hand side of an assignment. Numeric literals are rvalues and so may not be assigned. Given the variables:
变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。给定以下变量:
int units_sold = 0;
double sales_price = 0, total_revenue = 0;
it is a compile-time error to write either of the following:
下列两条语句都会产生编译错误:
// error: arithmetic expression is not an lvalue
units_sold * sales_price = total_revenue;
// error: literal constant is not an lvalue
0 = 1;
Some operators, such as assignment, require that one of their operands be an lvalue. As a result, lvalues can be used in more contexts than can rvalues. The context in which an lvalue appears determines how it is used. For example, in the expression
有些操作符,比如赋值,要求其中的一个操作数必须是左值。结果,可以使用左值的上下文比右值更广。左值出现的上下文决定了左值是如何使用的。例如,表达式
units_sold = units_sold + 1;
the variable units_sold is used as the operand to two different operators. The + operator cares only about the values of its operands. The value of a variable is the value currently stored in the memory associated with that variable. The effect of the addition is to fetch that value and add one to it.
中,units_sold 变量被用作两种不同操作符的操作数。+ 操作符仅关心其操作数的值。变量的值是当前存储在和该变量相关联的内存中的值。加法操作符的作用是取得变量的值并加 1。
The variable units_sold is also used as the left-hand side of
可以看出,左值和右值是跟左和右挂钩的。 回复 更多评论
Lvalues and Rvalues
左值和右值
We'll have more to say about expressions in Chapter 5, but for now it is useful to know that there are two kinds of expressions in C++:
我们在第五章再详细探讨表达式,现在先介绍 C++ 的两种表达式:
lvalue (pronounced "ell-value"): An expression that is an lvalue may appear as either the left-hand or right-hand side of an assignment.
左值(发音为 ell-value):左值可以出现在赋值语句的左边或右边。
rvalue (pronounced "are-value"): An expression that is an rvalue may appear on the right- but not left-hand side of an assignment.
右值(发音为 are-value):右值只能出现在赋值的右边,不能出现在赋值语句的左边。
Variables are lvalues and so may appear on the left-hand side of an assignment. Numeric literals are rvalues and so may not be assigned. Given the variables:
变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。给定以下变量:
int units_sold = 0;
double sales_price = 0, total_revenue = 0;
it is a compile-time error to write either of the following:
下列两条语句都会产生编译错误:
// error: arithmetic expression is not an lvalue
units_sold * sales_price = total_revenue;
// error: literal constant is not an lvalue
0 = 1;
Some operators, such as assignment, require that one of their operands be an lvalue. As a result, lvalues can be used in more contexts than can rvalues. The context in which an lvalue appears determines how it is used. For example, in the expression
有些操作符,比如赋值,要求其中的一个操作数必须是左值。结果,可以使用左值的上下文比右值更广。左值出现的上下文决定了左值是如何使用的。例如,表达式
units_sold = units_sold + 1;
the variable units_sold is used as the operand to two different operators. The + operator cares only about the values of its operands. The value of a variable is the value currently stored in the memory associated with that variable. The effect of the addition is to fetch that value and add one to it.
中,units_sold 变量被用作两种不同操作符的操作数。+ 操作符仅关心其操作数的值。变量的值是当前存储在和该变量相关联的内存中的值。加法操作符的作用是取得变量的值并加 1。
The variable units_sold is also used as the left-hand side of
可以看出,左值和右值是跟左和右挂钩的。 回复 更多评论