有关左值和右值,我的一些看法,可能不对,希望大神们指正!

有关左值和右值,我的一些看法,可能不对,希望大神们指正!

在现在很多书籍上都会看到有关左值和右值的一些观点, 但是真正能够理解其含义的好像很少。而且这些书籍上的说明都是以举例子的方式来说明其概念的(至少我看见的书籍是这样的)。这样就没有一个值得推敲的理论性的概念。根据个人的理解有如下的不成熟的概念,希望有识之士不要笑话(毕竟论坛这种东西是大家一起讨论的地方,我只是抛砖引玉。)
一个赋值语句左边的东西是左值,右边的东西是右值(这是很多书籍上的解释比如《C和指针》)。但是等号左边的东西究竟是什么?等号右边的东西究竟是什么?要说明这个问题,先要知道一个变量的组成。变量是一段有名字的连续存储空间。在源代码中通过定义变量来申请并命名这样的存储空间,并通过变量的名字来使用这段存储空间。 变量是程序中数据的临时存放场所。在代码中可以只使用一个变量,也可以使用多个变量,变量中可以存放单词、数值、日期以及属性。根据老谭的那本书上面所说的(很多人认为他的这本书太初级了,但是作为入门书来说,写的确实不错。而且很多高深的理论都是基于最最初级的理论升华的。)一个变量要有三部分:名字,特定属性,存储单元。“名字”很好理解,“特定属性”就是变量存放的值,“存储单元”就是存放值的那个空间。空间是有地址的,那么地址是什么?我们的内存是一个一个的小格子(通俗一下哈),它们是连续的,如果cpu想找到某一个内存单元时就要从头开始查找,那么这个内存单元必须要有一个编号,这个编号就是地址。地址和变量的名称是不一样的(这里没有说函数,而是说变量,函数的地址和函数名称是一样的)。那么一个赋值语句究竟是怎样的呢?
赋值语句的一般格式是:变量名=表达式 其中”=”为赋值号。表达式是由文本、常数、变量、属性、数组元素、其他表达式或函数调用的任意组合所构成。右面表达式一定要有具体的数值的。


常见的赋值语句有以下几种形式:

(1)a = 3;{赋予变量常数值}
(2)b = a + 1;{将含有其它变量的表达式赋予变量}
(3)N = N…
通俗的讲:赋值的过程就是把一个变量名下的内存单元注入一个数值的过程。
所以, 左值就是变量名,而右值是一个带有具体数值的表达式。


下面的一段代码:
    int i;
    int a = 12;
    int *pi;
    pi = &i;
    *(pi++) = a;//该语句对吗?换句话说:*(pi++)可以作为左值吗?
那么左面括号内的pi++的意义是什么呢?pi = pi + (int *)1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值