关于“左值”的困惑
我相信接触过C语言的人都听过"左值"这个概念,不过到底什么是左值呢?其实能说清楚的人其实并不多,这其中就包括很多使用C语言多年的所谓老鸟。
我听的最多的解释是:“左值就是可以出现在赋值运算符左边的东西”。
根据这个定义,我提出我的几个疑惑:
(1)
那么我们看如下代码片段:
int x, y;
x = 100;
y = x;
这里变量x既可以出现在赋值运算符的左边,又可以出现在赋值运算符的右边,难不成变量x既是左值,又是右值?
还有一点,在C/C++中数组名不能出现在赋值运算符的左边,那么数组名是右值咯?
带着这些疑惑,让我们试图从C标准中找到答案。注意,这篇博文仅限于C语言讨论,因为C++标准对这块知识点进行了诸多扩展,等将来有机会再另起一篇博文阐述C++中的左值知识点。
什么是左值?
想明白什么是左值,首先需要了解下什么是表达式。
参考链接:
《Value (computer science)》(Wikipedia)
《What are lvalue and rvalue in C?》
《C String Literals Are Lvalues》