必须知道的C语言知识细节:左值和右值知识总结 | 您所在的位置:网站首页 › rh是左边还是右边 › 必须知道的C语言知识细节:左值和右值知识总结 |
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,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。 |
CopyRight 2018-2019 实验室设备网 版权所有 |