• 左值与右值


    前言

            首先注意的是"地址y"和"地址y的内容"之间的区别,这是一个相当微妙之处,因为值大多数的编程语言中我们用同一个符号来表示这两样东西,由编译器根据上下文环境判断它们的具体含义。以赋值为例子说明。

    分析

                                                                     x = y;

    在这个上下文环境里,符号x的含义是"x所代表的地址",这被称为左值。左值在编译时就可知,左值表示存储结果的地方

    在这个上下文环境里,符号y的含义是"y所代表的地址的内容",这被称为右值。右值直到运行时才知,一般的,右值表示内容

    即,将y的内容赋值给x所在的地址空间。

           C语言中引入了"可修改的左值"这个术语,它表示左值可以出现在赋值语句的左边,这个是区分为与数组名的区分。数组名也用于确定对象在内存中的位置,是左值,但它不能作为赋值的对象。

    	int Arr[5]={1,2,3,4,5};
    	int *p = Arr;
    	for (;Arr<(p+5);Arr++)//**error**,Arr是不可修改的左值
    	{
    		printf("%d
    ",*Arr);
            }

          因此数组名是个左值但是个不可修改的左值,Arr是个指针常量,它的值在运行期间是固定不变的,Arr++也就无法实现。

    总结

           出现在赋值符号左边有时被称为左值(它位于“左手边”,或“表示地址”),出现在赋值符号右边有时则被称为右值(它位于“右手边”)。编译器为每个变量分配一个地址(左值),这个地址在编译的时候就可知,而且该变量在运行时一直保存在这个地址。相反,存储于变量中的值(右值)只有在运行时可知,在需要用到变量中存储的值,编译器才发出指令从指定的地址读入变量值并将它存于寄存器。

    ******************************************************************

    *          转载注明出处,如有歧义,欢迎指正                      *

    ******************************************************************

     

  • 相关阅读:
    百度之星2019 初赛一 题解
    [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
    [BZOJ2157]旅游(树链剖分/LCT)
    [BZOJ3230]相似子串(后缀数组)
    回文树/回文自动机(PAM)学习笔记
    [CF30E]Tricky and Clever Password(KMP+manacher)
    APIO2019题解
    代码大全
    算法竞赛常用资料整理
    手动修复 Flash CS3 简中化不完全问题
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468457.html
Copyright © 2020-2023  润新知