C语言中左值对象有哪些?哪些数据类型或是表达式可以算作是左值!
发布网友
发布时间:2022-07-25 20:03
我来回答
共5个回答
热心网友
时间:2023-10-14 20:15
左值,算是可访问存储的区域,要求“可访问存储”,那就可改变,变量(很多类型)就是,常数不是,你可以根据这个判断下左值。
理解下左值对象吧,一般来说是计算机里一块可访问可存储的区域,对象只是这块区域的抽象标识,变量a,b,*p等都算,只不过按不同的类型分出不同大小的区域。标识可以任意给,所以对象有哪些,举不完,而对象类型倒是有,什么int对象,char对象,指针对象等等吧。
既然左值要求的是“可访问可存储”,即可找到它改变它,这个则不会关系到区域大小。而存储区域大小是靠类型来确定(比如int我分多大内存啊),既然不关系到大小,与数据类型何干!
有几个运算符构成的表达式,可以算是左值,不过很少(比如a++;a--;*p等他们可单独成立,这个我也知道不多,还有sizeof(?)挖一块?大小的区域),其他的一般都算右值的,因为表达式最后一般都会产生一个不可变的值(比如a+b,最终整个表达式代表一个结果值,不可变,它要赋给一个存储对象也就是左值),当然左值表达式可以做右值,它本来就存有一个值,可以传给他人嘛。。。
以前研究过左值,可以一起讨论下。。。。。
热心网友
时间:2023-10-14 20:15
左值指的是双目运算中,位于运算符左侧的表达式。
左值的类型,依赖于运算符的类型。
区分双目运算符,有如下要求:
1 结构体成员访问,有.和->两种。其中.要求左值必须为结构体变量,而->要求左值必须为结构体指针。
2 赋值类运算符,包括=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=,要求左值必须为可赋值的变量。不可以是带有运算符的表达式,也不能是常量。
3 其它双目运算符对左值没有要求,可以为任意表达式,只要有值即可。
热心网友
时间:2023-10-14 20:16
变量是左值,所以可以放在赋值语句左边。数字字面值是右值,所以不能被赋值。
所以看问题可以知道你应该不了解左值的概念。
左值是指可以出现在赋值语句的左边或右边的。即得是变量来的,而不是数据类型或表达式。该变量是什么数据类型是无所谓的。
热心网友
时间:2023-10-14 20:16
指针解引用
热心网友
时间:2023-10-14 20:17
typedef char VertexType[5];
typedef VertexType SElemType;
SElemType属于char*
改过后
typedef VertexType* SElemType;
SElemType属于char
*S->top++ = e;
S->top属于char [5];
e属于char*
改过后两边都是char型
*S->top++取值为char型,然后指针加1