Skip to content

左值

[[C]] 我们只能对左值进行取地址操作哦! 但是请注意,字符串字面量(例如"Helloworld")虽然不是一个左值,但是我们可以对他进行取地址操作 但是其他的字面量,例如整数字面量是不可以对其进行取地址操作符的。

在C语言中,左值(Lvalue) 是一个非常重要的概念,它指的是可以出现在赋值运算符(=)左侧的表达式。左值通常表示一个可修改的内存位置,而不仅仅是值本身。


1. 左值的定义

  • 左值(Lvalue)是指一个表达式,它表示一个可寻址的内存位置
  • 左值可以出现在赋值运算符的左侧,例如: c int a = 10; a = 20; // a 是左值 这里,a 是一个左值,因为它表示一个可修改的内存位置。

2. 左值的特性

  • 可寻址:左值必须对应一个具体的内存地址。
  • 可修改:左值通常是可以被修改的(除非被 const 修饰)。
  • 有类型:左值有明确的类型,例如 intfloatstruct 等。

3. 左值的例子

以下是一些左值的例子:

int a = 10;       // a 是左值
int *p = &a;      // p 是左值
*p = 20;          // *p 是左值
arr[0] = 30;      // arr[0] 是左值
struct Point pt;
pt.x = 40;        // pt.x 是左值

4. 非左值的例子

以下是一些非左值的例子:

10 = a;           // 错误:10 不是左值
(a + b) = 20;     // 错误:(a + b) 不是左值
&a = p;           // 错误:&a 不是左值

5. 左值与右值的关系

  • 左值:可以出现在赋值运算符的左侧,表示一个可修改的内存位置。
  • 右值:只能出现在赋值运算符的右侧,表示一个值或临时结果。
  • 例如: c int a = 10; // a 是左值,10 是右值 int b = a; // b 是左值,a 是右值

6. 特殊情况

  • const 左值:被 const 修饰的左值不可修改,但仍然是左值。 c const int a = 10; a = 20; // 错误:a 是 const 左值,不可修改
  • 函数返回值:如果函数返回引用(在C++中),则返回值是左值;如果返回普通值,则返回值是右值。

7. 总结

  • 左值表示一个可寻址、可修改的内存位置,可以出现在赋值运算符的左侧。
  • 左值是C语言中非常重要的概念,理解它有助于更好地理解赋值、指针、数组等操作。
  • 常见的左值包括变量、数组元素、指针解引用、结构体成员等。