有关左值和右值,个人一些见解,可能不对,但愿大神们指正!

有关左值和右值,个人一些见解,可能不对,但愿大神们指正!

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


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

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


下面的一段代码:
int i;
    int a = 12;
    int *pi;
    pi = &i;
    *(pi++) = a;//该语句对吗?换句话说:*(pi++)能够做为左值吗?
那么左面括号内的pi++的意义是什么呢?pi = pi + (int *)1;
相关文章
相关标签/搜索