谁能详细给介绍下C的左值。。?

atom_09 2009-09-08 06:32:31
RT 。
谢谢兄弟门了
...全文
253 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
reff1 2009-10-06
  • 打赏
  • 举报
回复
顶楼上的
pmerOFc 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
ctrl+v的,请勿跨省追捕

……
    通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

……
[/Quote]

极其荒谬
应该跨国追捕
某某9 2009-10-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pmerofc 的回复:]
引用 2 楼 mstlq 的回复:
ctrl+v的,请勿跨省追捕

……
    通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

……


极其荒谬
应该跨国追捕
[/Quote]

我感觉不太荒谬,不建议跨地区追捕
knop1027 2009-09-08
  • 打赏
  • 举报
回复
通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了
mstlq 2009-09-08
  • 打赏
  • 举报
回复
不及1楼3楼明白……
lbjfeng 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
ctrl+v的,请勿跨省追捕

左值和右值
我们在看书的时候,经常可以看到关于 左值(L-value) 和 右值(R-value) 的概念,那么到底什么是左值,什么是右值,它们之间的区别又是在哪里呢?

    通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

举个很简单的例子:

a=b+100;

那么这里a就是左值,b+25就是一个右值。左值和右值之间是不一定都能互换的,上面的这个例子就是不能互换的,如果写成

b+100=a;

大家都能看出来这样写会不编译通过的,因为编译器无法判断b+100的内存地址,所以不能操作。

看了这个例子,可以做一个总结,左值必须应该是一个变量或者是表达式等,但是它的物理位置是可以确定的,而右值不一定,这也是它们两者之间的区别。

关于左值是表达式的例子有数组,还有指针这些都可以。

int array[10];

int a=5;

array[a+3]=10; //这里左值就是一个数组表达式了

 

此文完。

[/Quote]

说的挺好。。
顺便问一句:什么是跨省追捕???
mstlq 2009-09-08
  • 打赏
  • 举报
回复
我更强调的是,这个存储是你可以负责的.
一楼这句加红就更好了^_^
baihacker 2009-09-08
  • 打赏
  • 举报
回复
6.3.2.1 Lvalues, arrays, and function designators
1 Anlvalue is an expression with an object type or an incomplete type other than void;53)
if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
When an object is said to have a particular type, the type is specified by the lvalue used to
designate the object. A modifiable lvalue is an lvalue that does not have array type, does
not have an incomplete type, does not have a const-qualified type, and if it is a structure
or union, does not have any member (including, recursively, any member or element of
all contained aggregates or unions) with a const-qualified type.
mstlq 2009-09-08
  • 打赏
  • 举报
回复
ctrl+v的,请勿跨省追捕

左值和右值
我们在看书的时候,经常可以看到关于 左值(L-value) 和 右值(R-value) 的概念,那么到底什么是左值,什么是右值,它们之间的区别又是在哪里呢?

通俗的讲,左值就是能够出现在赋值符号左面的东西,而右值就是那些可以出现在赋值符号右面的东西了。

举个很简单的例子:

a=b+100;

那么这里a就是左值,b+25就是一个右值。左值和右值之间是不一定都能互换的,上面的这个例子就是不能互换的,如果写成

b+100=a;

大家都能看出来这样写会不编译通过的,因为编译器无法判断b+100的内存地址,所以不能操作。

看了这个例子,可以做一个总结,左值必须应该是一个变量或者是表达式等,但是它的物理位置是可以确定的,而右值不一定,这也是它们两者之间的区别。

关于左值是表达式的例子有数组,还有指针这些都可以。

int array[10];

int a=5;

array[a+3]=10; //这里左值就是一个数组表达式了



此文完。
baihacker 2009-09-08
  • 打赏
  • 举报
回复
简单地说就是表示一个拥有你可以访问的存储的对象.

int a;

int foo(){return 1;}

foo的返回的是一个int,这个int的值是1,但是不应该知道这个int对象的存储.

a + 1会通过+产生一个值,这个值是拥有存储的,但是这个存储也不是你应该知道的.

当你可以拥有这个存储的时候,就可以把这个表达式放在=的左边,通过赋值,来改变自己这个对象的状态.

在程序设计语言中有的是通过形式化地描述,说明什么样的是左值,什么样的是右值.

有的文章也称:表达式所表示的对象的存储为左值,其存储的内容为右值.

其实本质还是一样.

我更强调的是,这个存储是你可以负责的.

因为int foo(){return 1;}显然返回是占存储的.

但是这不是你可以负责的,这个返回的东西可以在寄存器里,也可以在某段内存里,所以你负不了责啊.

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧