xiaoniugogogo 发表于 7 天前

C语言的左值右值

有没有大佬通俗的讲一下C语言的左值右值,看了书还是云里雾里{:10_257:}

FishC 发表于 7 天前

通俗易懂地理解 C 语言中的左值和右值

很多鱼油在学习 C 语言时,都会被“左值”和“右值”这两个概念搞晕。其实它们并不难,下面我用一个简单的比喻来帮你理解。

一、什么是左值(lvalue)?

左值就是“可以放在赋值号左边的值”,它代表的是一个“有名字的内存位置”。

比如:


int a = 10;
a = 20;


这里的 a 就是左值,因为它代表的是变量 a 所在的内存位置,我们可以给它赋新值。

二、什么是右值(rvalue)?

右值就是“只能放在赋值号右边的值”,它代表的是一个“具体的数值或临时结果”。

比如:


int a = 10;
int b = a + 5;


这里的 10 和 a + 5 都是右值,它们是表达式的结果,不能再被赋值。

你不能写:


10 = a;      // 错误!10 是右值,不能放左边
a + 5 = b;   // 错误!a + 5 是右值,不能放左边


三、一个小口诀帮助记忆


[*]左值:能放左边,代表“位置”
[*]右值:只能右边,代表“数值”


四、特别注意:有些表达式既是左值又是右值

比如:


int a = 5;
int *p = &a;
*p = 10;


这里的 *p 是左值,因为它可以被赋值;但它也是右值,因为它是表达式的结果。

总结

左值:有名字、有地址,可以赋值
右值:临时的、没有名字,只能用来计算

如果你还不太明白,可以把变量看成“盒子”,左值是“盒子的位置”,右值是“盒子里的东西”。

有任何不懂的地方欢迎继续提问!{:10_285:}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 7 天前

左值:有名字、有地址,可以赋值
右值:临时的、没有名字,只能用来计算
页: [1]
查看完整版本: C语言的左值右值