• 左值和右值


    C 语言中有两个概念,一个是“左值”,另外一个是“右值”。

    1.赋值目的

    赋值表达式语句的目的是把值存储到内存上,其中:

    1. 用于存储值的数据区域统称为“数据对象”(这和面向对象的“对象”不同,C 只会在提及左右值概念的时候才会提及这个术语)
    2. 使用“变量名”是标识对象的一种方式,除此以外,指定数组的某元素、结构体的某成员、指针表达式也都可以作为对象的标识

    2.左值右值

    因此,沿着上述思路可以得到左右值得概念。

    2.1.左值

    左值:是可以用于标识或定位存储位置的标签。

    1. 左值指向一个对象,可以引用内存中的地址
    2. 左值可用在赋值运算符的左侧,也就叫左值(但是也同样可以放在赋值运算符得右侧)

    但是由于 C 的某次新标准加入了 const 关键字,导致有时会不满足第二条规则,因此左值又根据第二条规则分为了“可修改左值”和“不可修改左值”(后者只能放在赋值符号的右边)。

    也就是说,根据第一条判断是否为左值,第二条判断左值是否可以被修改。

    2.2.右值

    右值:是可以赋值给可修改左值的量,且本身不能是左值。右值只能放在右边,也就叫右值。右值无法被赋值,因此不可能在赋值符号的左边。

    补充:我们举几个例子来判断左右值

    int ex;		//创建左值(可修改),已经关联上某个特定内存
    int why;	//创建左值(可修改),已经关联上某个特定内存
    int zee;	//创建左值(可修改),已经关联上某个特定内存
    const int TWO = 2;  	//创建出左值(不可修改)
    why = 42;			   //将右值 42 赋值给左值(可修改)
    zee = why;			   //将左值赋给左值
    ex = TWO * (why + zee); //(why + zee) 整体是一个右值,不指定某个特定内存,也不能直接给其赋值,该式只是程序计算出来的临时值,计算完后就会被丢弃
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    因此左值和右值不能根据其位置是左还是右来简单认定,实际上这两个术语很容易被人所误会。

  • 相关阅读:
    精通Nginx(10)-负载均衡
    关于安卓recyclerview的子布局中,scrollview滑动冲突问题
    剑指 Offer 68 - II. 二叉树的最近公共祖先
    matlab 采用描点法进行数据模拟和仿真
    【零基础入门SpringMVC】第二期——匹配请求与获取请求参数
    MyBioSource p53 肿瘤抑制蛋白 (TP53),多克隆抗体
    Java学习笔记——并发编程(一)
    阿里、腾讯、京东齐降价:云计算迎来新拐点
    堆排序的筛选方法建立的初始堆
    【目标检测】非极大值抑制NMS的原理与实现
  • 原文地址:https://blog.csdn.net/m0_73168361/article/details/134485723