|
发表于 2018-8-18 17:35:01
|
显示全部楼层
本帖最后由 微末非末 于 2018-8-18 17:38 编辑
没复杂啊
地址 (l-value) 没有透过指针是改不了的,值 (r-value) 可以透过赋值运算符 (=) 修改
这句话,我就得你就理解得有问题。我举个例子
int a = 520; (这里假设 a 这个变量所表示的内存位置是 0x100)
在这里 a 是 l-value (也就是向系统要了 sizeof(int) 个字节的空间 ,我对这块空间取名为 a ,这是一块有特定位置的空间)
而 等于号右边520它是 r -value (这个520也肯定会存在内存的某个位置,如果没有这个内存位置,那编译器要上哪找这个520?但是它存在哪里我们是不知道的,系统将它保护起来了,所以这样写 &520 , 或者 520 = 1314,这样肯定会报错,要是常量r-value都被改变了,那岂不是乱套了?)
还要有一点: l-value 是可以被当作 r-value 使用的,也就是说它出现在等于号左边和右边,所代表的意义是不同的,当在左边的时候,我们就可以对它进行赋值(它表示的是0x100这个地址空间) ;当在右边的时候,我们就可以对它的值进行引用 (它就表示520这个值)。这个在小甲鱼的视频里有说到过,还有《c和指针》里也有说到过
这句 “地址 (l-value) 没有透过指针是改不了的”, 地址是r-value, 相当于上面那个520,你不可能可以修改它的。我们能修改的就只有指针变量,指针变量里边放的什么值。比如说 int *p = &a , 然后我想让它指向另一个地址了,p = &b 。我修改的是p 这个变量的值,而不是地址。
我记得有的书上是有这么一句话: 为了方便描述我们把指针变量简写为指针....
指针是地址,而指针变量是放地址的变量
|
|