关于lvalue and rvalue

本文解析了C/C++中L值与R值的概念及区别。L值通常指内存中的一个区域,它可能不可修改;而R值则代表一个具体的数值,不能被赋值。文章进一步说明了几种特定情况下L值的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lvalue :An object is a region of storage that can be examined and stored into.An lvalue does not necessarily permit modification of the object it designates: eg

An array type

An incomplete type

A const-qualified type

An object is a structure or union type and one of its members has a const-qualified type

rvalue:

The term rvalue refers to a data value that is stored at some address in memory. An rvalue is an expression that cannot have a value assigned to it.

lvalue 更代表的一个区域,虽然你不一定可以更改这个区域的内容,但你更清楚在语言层面更代表一个区域。

rvalue 更代表一个值,你更清楚在语言层面更代表一个数值

转载于:https://my.oschina.net/invictuslee/blog/223070

任务描述 本关任务:编写程序,实现以下功能: 1、对于给定的中缀表达式,创建与其对应的表达式树(二叉树),用二叉链表存储; 2、利用表达式树进行表达式求值。 说明:除了关卡中提示要补充的代码,可以额外定义辅助数据结构和函数,但不能改动main函数。 相关知识 为了完成本关任务,你需要掌握:1.表达式树的创建,2.表达式树的求值。 表达式树的创建 为实现表达式树的创建算法,可以使用两个工作栈,一个称做OPTR,用以暂存运算符;另一个称做EXPT,用以暂存已建立好的表达式树的根节点。算法步骤如下: 初始化OPTR和EXPT栈,将表达式起始符'#'压入OPTR栈。 扫描表达式,读入第一个字符ch,如果表达式没有扫描完毕至'#'或OPTR的栈顶元素不为'#'时,则循环执行以下操作: 若ch不是运算符,则以ch为根创建一棵只有根节点的二叉树,且将该树根节点压入EXPT栈,读入下一个字符ch; 若ch是运算符,则根据OPTR的栈顶元素和ch的优先级比较结果,做不同的处理: 若是小于,则ch压入OPTR栈,读入下一个字符ch; 若是大于,则弹出OPTR栈顶的运算符,从EXPT栈弹出两个表达式子树的根节点,以该运算符为根节点,以EXPT栈中弹出的第二个子树作为左子树,以EXPT栈中弹出的第一个子树作为右子树,创建一棵新二叉树,并将该树根节点压入EXPT栈; 若是等于,则OPTR的栈顶元素是'('且ch是')',这时弹出OPTR栈顶的'(',相当于括号匹配成功,然后读入下一个字符ch。 表达式树的求值 表达式树建立后,通过对表达式树的后序遍历,很容易实现表达式的求值运算。算法步骤如下: 设变量lvaluervalue分别用以记录表达式树中左子树和右子树的值,初始均为0。 如果当前节点为叶子(节点为操作数),则返回该节点的数值,否则(节点为运算符)执行以下操作: 递归计算左子树的值记为lvalue; 递归计算右子树的值即为rvalue; 根据当前节点运算符的类型,将lvaluervalue进行相应运算并返回。 测试说明 平台会对你编写的代码进行测试: 测试输入: 8/(3+2)# 预期输出: 1 输入说明: 输入是一个中缀表达式,以'#'作为结束符。操作数为0~9的自然数。 输出说明: 输出是表达式求值的结果。 开始你的任务吧,祝你成功!
最新发布
04-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值