指针C中的l值,r值

man*_*utd 3 c pointers

在C编程中,
我无法准确理解什么是l值,r值,并将l值转换为r值,并将r转换为l.

*x = *(x+1)
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 7

右值只是一个值 - 17或3.14或该订单上的某种东西.

左值是(简化一点)某种东西,它指的是内存中可以/确实持有值的某个位置.

最常见的左值只是一个变量,所以在类似的情况下x=10,x是一个左值,并且10是一个右值.事实上,这就是名称的起源:一个lvalue(最初)任何可能出现在作业左侧的东西,而一个Rvalue可能出现在作业的右侧.

将左值转换为右值基本上只意味着从存储的任何地方(通常是内存)中检索存储在左值中的值.然而,从右值到左值没有任何正常的转换 - 一旦你有类似的东西10,你就无法转换回内存位置.那时它只有10,并且可能存在值为10(或多于一个)的变量的事实并不意味着您可以将10转换回变量.