美文网首页
必须知道的C语言知识细节:左值和右值知识总结

必须知道的C语言知识细节:左值和右值知识总结

作者: 哪有岁月静好 | 来源:发表于2020-07-21 18:41 被阅读0次

C语言中左值和右值概念是来自赋值或复合赋值表达式。初学者会很容易迷惑,这里给出这两个概念总结。

对于赋值表达式E1=E2,其中E1必须是可修改的左值,E2是右值。

左值:简写lvalue,left value

右值:简写rvalue,right value

例如:int m = 1; 很明显m是左值,1是右值。

左值是指向内存区域的对象,左值可以出现赋值表达式的左边或右边,当左值出现的右边时,自动转换为右值使用。

右值是指存储在内存中的数值本身,右值不能出现的赋值表达式左边,否则编译出错。

例如:

int m,n;

m = 1; // 合法,m是左值

n = m; // 合法,n是左值,m自动转换为右值

1 = m; // 不合法,1是常量,只能作为右值

1 = 2; // 不合法,1是右值

C语言中左值要求是变量,包括以下情况:

基本类型的变量:char int float double 型变量

枚举类型变量

数组类型下标成员访问:例如 a[i] = 1

结构类型变量或成员变量

联合类型变量或其成员变量

指针类型:两种情况

int *p ;

p = (int *)(0x0000fffff);  // 指针本身赋值

*p = 1;  // 指针指向的对象赋值

以下几种特殊情况的变量不能作为左值:

如果以上变量,有const关键字修饰,相当于常量,只能作为右值。

对于数组名本身,无法作为左值,只能作为右值,表示地址常量。例如 int a[100]; a是数组名,本身无法作为左值,a[i]是数组成员可以作为左值。

函数名无法作为左值,只能作为右值,表示地址常量。

右值:可以是变量、常量和表达式。

左值所有情况均可以作为右值。

常量,例如 1 'a' 100.01 0xffffffff等。

表达式,表达式不是变量,即使表达式中含有变量,表达式最终的结果是一个右值。例如 m+n 1+m i++ 等。

数组名、函数名、const修饰的变量

例如:

int i = 0;

i++ = 2; // 不合法,i++是表达式,只能作为右值

int a,b,c;

a=b=c=1; // 合法,最终a,b,c都等于1

a=(b=c)=1; // 不合法,(b=c)是表达式是右值,无法再赋值1

int a[100];

a[0] = 1; // 合法,数组成员是左值

int *p = a; // 合法,数组名可以作为地址常量

a = &p; // 不合法,数组名不能作为右值

const int i = 1; // 只读变量初始化

i = 2; // 不合法,只读变量无法再赋值

int j = i; // 合法,const变量可以作为右值

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。



相关文章

  • 必须知道的C语言知识细节:左值和右值知识总结

    C语言中左值和右值概念是来自赋值或复合赋值表达式。初学者会很容易迷惑,这里给出这两个概念总结。 对于赋值表达式E1...

  • 引用叠加规则和模板参数类型推导规则

    1.基础知识 读这篇文章之前,你该掌握如下的知识,c++的左值和右值,以及模板的基础知识。c++的左值和右值文章可...

  • 理解c++中左值、右值

    说明 c/c++程序员肯定都知道左值、右值,理解好左值、右值有利于我们更好的使用c++语言。下面是我的学习笔记 概...

  • C++11那些难事:左值引用、右值引用与完美转发

    上一篇C++那些难事:左值与右值搞明白左值与右值,下面讲解左值引用与右值引用。 1. 左值引用与右值引用 左值右值...

  • C++学习笔记

    基本知识 右值引用C++11新特性,在出现右值引用之前,只有左值可以被引用,方法为&(例如int& a)。与之对应...

  • C++11 中的左值、右值和将亡值

    C++98 中表达式值的类型只有左值和右值两种类型,可以取到地址的表达式就是左值,不是左值的值就是右值,而C++1...

  • 右值引用小结

    今天总结下右值的那些事儿 什么是右值 右值的必要性 move函数 什么是右值 传统c++的引用就是左值引用,使得标...

  • C++ 多线程

    前置知识点回顾,值传递情况 因为后面多线程知识,涉及更改变量和值的问题,所以前置demo来复习一下 左值和右值 ①...

  • C++11之move语义

    要理解c++11的move语义,就需要理解C++中的左值和右值和临时对象的概念。 左值与右值和临时对象的简单介绍:...

  • 右值引用

    参考资料 谈谈 C++ 中的右值引用C++11 左值、右值、右值引用详解

网友评论

      本文标题:必须知道的C语言知识细节:左值和右值知识总结

      本文链接:https://www.haomeiwen.com/subject/ahewkktx.html