本文目录一览

1,C中的左值和右值指的是什么啊求通俗的语言解释谢谢

通俗的讲不允许赋值的表达式或者变量都只能做右值,能被赋值得是左值
个人认为比较好的入门书籍: c++程序设计 谭浩强编著 清华大学出版社
int a, b;a = 1; b = 2;a = b; // a 为左值,b为右值;在这里的意思是将右键赋值给左值。
就是左右位置问题了

C中的左值和右值指的是什么啊求通俗的语言解释谢谢

2,左值与右值的介绍

C/C++语言中可以放在赋值符号左边的变量,左值表示存储在计算机内存的对象,左值相当于地址值。右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值,右值相当于数据值

左值与右值的介绍

3,C语言什么叫做左值右值

左值就是在赋值中可以放在赋值操作符两边的值,比如:inta=1;doubleb=2.0a=b;b=a;这里a和b都是左值,一切变量都是左值,但const量是例外。而右值则是只可以放在赋值操作符右边的值,比如:inta=0;char*b="hello";3=a;//ERROR"howdy"=b//ERROR这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值。

C语言什么叫做左值右值

4,c语言中为什么a的运算结果是一个右值 执行顺序不是先返回a然后aa

左值(lvalue)和右值(rvalue)最先来源于编译。在C语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。定义:左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以作为一个左值。右值指的是引用了一个存储在某个内存地址里的数据。从上面的两个定义可以看出,左值其实要引用一个对象,而一个对象在我们的程序中又肯定有一个名字或者可以通过一个名字访问到,所以左值又可以归纳为:左值表示程序中必须有一个特定的名字引用到这个值。而右值引用的是地址里的内容,所以右值又可以归纳为:右值表示程序中没有一个特定的名字引用到这个值。++a的话因为返回结果和运算之后的a一样,所以++a返回的是真实的a,可以被重新赋值,所以可以作为左值。而a++返回的是运算之前的a,而此时a已经+1了,返回的数据其实是过去的a,它是另外复制出来的,而不是真正的a,所以无法被赋值,所以它只能是右值。所以a++;在执行当中的顺序是,先把a的值复制出来,进行整体运算,然后再a=a+1。

5,返回值的左值右值是什么东西

可以这样理解,左值是变量,右值是常量,变量也可以作为右值
左值(lvalue)和右值(rvalue)最先来源于编译理论(感谢南大小百合的 programs)。在 C 语言中表示位于赋值运算符两侧的两个值,左边的就叫左值,右边的就叫右值。比如: int ii = 5;//ii 是左值,5 是右值 int jj = ii;//jj 是左值,ii 是右值 上面表明,左值肯定可以作为右值使用,但反之则不然。左值和右值的最早区别就在于能否 改变。左值是可以变的,右值不能变。【注 1】 注 1:这一点在 C++中已经猪羊变色,不再成立。拱猪游戏还是挺好玩的,我还真抓过好几次

6,C语言 什么叫做左值右值

左值 ,就是指可以被取地址的表达式。简单的说,可以出现在等号左边的就是左值。比如:另外也可以有不是变量的左值:这里,getRef()返回的是一个全局变量的引用,它的值存在固定的位置,因此是一个左值。右值 ,则指的是没有名字的值,它们只出现表达式的计算过程中,也就是等号的右边。例如:getName()返回一个在函数中构造的字符串。你可以把它的值赋给一个变量,但是它是一个临时对象,我们并不知道它的值放在哪里。所以,getName()是一个右值。说清楚了什么是左值和右值,那么什么是右值引用呢?右值引用 是C++11中新引入,是一种只绑定与右值的引用。区别与左值引用(&),它用&&来表示。与左值引用一样,它也可以是const或者是非const的,但是我们基本不会在实际应用中用到const的右值引用(这个大家可以思考一下为什么)。让我们来看一些例子:从例子中,我们可以看到const的左值引用可以绑定到右值,非const的左值引用不能绑定到右值,右值引用可以绑定到右值。那么右值引用怎么帮助我们解决问题呢?让我们接着看右值引用在作为函数参数时的行为。假如我有下面两个函数:第一个printReference函数是用const左值引用作为参数,从前面的例子中我们知道它既可以接受左值也可以接受右值。但是当有了第二个printReference的用右值引用的重载之后,右值将优先绑定到第二个printReference。这点我们可以通过如下代码来验证:输出为:

7,左值右值的问题还有返回左值与右值的区别使用引用const对

左值,是用于保存数据的,所以必须是一个可以储存数据内存单元,不能是常数、立即数。右值,是数据,可以是某个储存在数据内存单元数据,也可以是常数,还可以是立即数。一般函数返回值只能作为右值。如果将函数返回值声明成引用,这样的函数也可以位左值。
楼上的解答让我理解了很多,也学会了用disassembly查看器。可惜我不怎么懂汇编,不然我就可以帮你解答那个“而且如果把const int a = 3;提到main之外作为全局的,则报错。”问题了。不过在我印象中:1、常量里边的值是不能被修改的。但是你上面的程序确被修改了2、局部变量和全局变量在内存中存放的位置有差异,局部变量是存放在栈中的,全局变量和静态变量是存放在全局区的。我猜测,对于已经被初始化的全局变量,编译器加上了保护的机制,使得这块内存不能被修改;而存放在栈中的变量的保护强度稍弱些。

8,左值和右值的区别

左值与右值按字面意思,通俗地说。以赋值符号 = 为界,= 左边的就是左值,= 右边就是右值。 比如:(1) int b = 3;(2) int a = b;第(2)行代码,a为左值,b为右值。更深一层,可以将 L-value 的 L, 理解成 Location,表示定位,地址。将 R-value 的 R 理解成 Read,表示读取数据。现在的计算机数据放在内存。内存有两个很基本的属性:内存地址和内存里面放的数据。想象完全一样的箱子。每个箱子有个编号,用来区分到底是哪个箱子,箱子里面可以放东西。内存地址相当于箱子的编号,内存的数据,相当于箱子里面放的东西。变量名编译之后,会映射成内存地址。看看a = b的含义。其实就是 将 "b地址内存里面的数据",放到"a地址内存"中。中文名左值与右值外文名lvalue and rvalue快速导航案例列举 应用注意左值右值基本信息C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)操作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。简单来说就是,左值相当于地址值,右值相当于数据值。右值指的是引用了一个存储在某个内存地址里的数据。案例列举比如: int ia,ib;ib=0;ia=ib;在这里,首先定义ia,ib。然后对ib赋值,此时计算机取ib的左值,也就是这个符号代表的内存位置即内存地址值,计算机取0的右值,也就是数值0;然后给ia赋值为ib,此时取ib的右值给ia的左值;所以说,ib的左值、右值是根据他的位置来说的;这也算是形式语言的一个有意思之处吧。应用注意左值右值翻译:L-value中的L指的是Location,表示可寻址。Avalue (computer science)that has an address.R-value中的R指的是Read,表示可读。in computer science, a value that does not have an address in a computer language.左值和右值是相对于赋值表达式而言的。左值是能出现在赋值表达式左边的表达式。左值表达式可以分为可读写的左值和只读左值。右值是可以出现在赋值表达式右边的表达式,他可以是不占据内存空间的临时量或字面量,可以是不具有写入权的空间实体。如int a=3;const int b=5;a=b+2; //a是左值,b+2是右值b=a+2; //错!b是只读的左值但无写入权,不能出现在赋值符号左边(a=4)+=28; //a=4是左值表达式,28是右值,+=为赋值操作符34=a+2; //错!34是字面量不能做左值

9,有些C语言书里面说的左值和右值到底什么意思详解

c语言里面只有左值和非左值,没有右值。左值可以寻址的变量,也可以理解为可以放在赋值号左边的变量。非左值就是左值以外的变量常量等值。c++里面才有右值的概念。
左右值是相对于=号(赋值)的位置而言的,放在=左边的叫左值(被赋值),=右边的就叫右值再看看别人怎么说的。
左值就是在赋值中可以放在赋值操作符两边的值,比如: int a = 1; double b = 2.0 a = b; b = a; 这里a和b都是左值,一切变量都是左值,但const量是例外。 而右值则是只可以放在赋值操作符右边的值,比如: int a = 0; char *b = "hello"; 3 = a; // ERROR "howdy" = b // ERROR 这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值。参考资料: http://zhidao.baidu.com/question/20860710.html?si=1

10,c中的左值和右值右值引用到底是什么关于引用这一节看得很迷

左值 顾名思义 等号左边的值。其实左值和右值是C++里面比较基础且严谨的概念(具体的完整定义自己查书吧,我也背不下来。),一般在老外的书里常提,国产渣书几乎没这个词。下面是我自己的理解:其实左值就是可以赋值的值,基本上就用户定义的变量。右值就是等号右边的。可以是变量,也可以是常量。比如 int a = 5; int b = a;a,b都是用户定义的变量,可以随便赋值。5是字面值常量。 你可以对a,b求地址 比如 int* p = &a;但是你不能对5求地址。 比如int *p = &5; 另外 C++ primer里面提到 前缀++返回左值,后缀返回右值。也可以通过左值与右值的概念来理解++操作法。比如 ++a = 10; 可以编译通过 (a++) = 10; 编译错误。同样 你也不能对 (a++)的值取地址。其他的右值概念比如 函数的返回值等 也不能取地址。右值引用是C++11中的概念,目的就是解决上面所说的函数返回值等问题。比如你返回了一个vector,可能包含很多元素,一次return就会产生一个临时变量,需要构造与析构。而实际上你可能只是这样写 vector ret = getVector(); 本身的ret还需要从临时的返回值里面再构造一次。产生浪费。C++ 11里面配合MOVE语义可以解决这种情况。 具体的我也说不太明白了,总之这个是C++新特性。
引用你就理解为把柄,好比说你的手机号码和你的关系手机号是你的引用但不是你本身,但是通过手机号就可以找到你再看看别人怎么说的。
引用你就理解为把柄,好比说你的手机号码和你的关系手机号是你的引用但不是你本身,但是通过手机号就可以找到你

文章TAG:右值  C中的左值和右值指的是什么啊求通俗的语言解释谢谢  
下一篇