java左值与右值问题_什么是左值和右值
第一次让左值右值引起我注意的时候是在刚接触字符串和指针的时候编译器对代码的一段错误提示
那什么是左值(l-value)那:
说的通俗一点就是可以放在赋值号左边的叫左值 就是可以被赋值的。是一个地址
左值一般是是一个变量可以被赋值的变量。(const变量是一个例外只能做右值)
那什么是右值(r-value)那:
同样我们可以说是可以放在赋值号右边的 就是可以给其他变量赋值的,
它可以是一个变量也可以是一个常量也可以是一个表达式。是一个内容
例如:
#include
intmain()
{char name[20];char *adress;
name="小明"; //错误的
adress="南极"; //正确的
}
name="小明";
这个语句中 字符数组 name 就不是一个左值 因为name 在定义的时候它是被分配道内存的栈中,
而 "小明" 是存储在内存的静态常量中 ,它在赋值的时候是将这个静态区的常量的首地址赋給一个指针变量,
所以name 字符数组不能做这里的左值 而且 name 本质上是一个数组 是将每个字符存储在单元格中 ,
虽然在按字符串格式输出的时候是一段字符串,但是实际上它本质上也是一个一个字符组到一起的。
如果要把一段字符串存储在字符数组中就需要把一个一个字符存储在数组中。
什么是表达式:
表达式由一个或多个操作数通过操作符组合而成。最简单的表达式仅包含一个字面值常量或变量。较复杂的表达式则由操作符以及一个或多个操作数构成。
一个变量是表达式但是一个表达式就不一定是变量了。
确切一点说一个简单的赋值语句
左值是一个地址 左值是左侧表达式所代表的地址
右值是右侧表达式所代表的内容。
但左值并不一定能被赋值,因为左值可以引用某个常量。 所有的引用都是左值。
右值是表达式的值(不是引用),可以放在赋值右面。
所以所有左值都可以做右值。
函数的引用参数
把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制。在按值传递时,函数操纵的是实参的本地拷贝。当参数是引用时,函数接收的是实参的左值而不是值的拷贝。
这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。
java左值与右值问题_什么是左值和右值相关推荐
- swing查询输入框无值时出现null异常_如何优雅处理代码中 Null 值引起的 Bug?告别 Null 恐惧症!...
导语 在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不这头绪,它的出现很有可能和当前的业务逻辑并没有关系.但它会让你很头疼. 有时候,更可怕的是系统因为这些空值的 ...
- java左值与右值问题_[C++11]左值、右值、左值引用、右值引用小结
左值和右值 左值:指表达式结束后依然存在的持久对象,可以取地址,具名变量或对象 右值:表达式结束后就不再存在的临时对象,不可以取地址,没有名字. 比如 int a = b + c;,a 就是一个左值, ...
- java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
[单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...
- 不规则现金流 java设计_不规则现金流的现值与终值-(年金四)
今日分享 Today's Share 人生虽然艰难,但是如果你能笑对人生,你就能享受人生 Life is tough,but if you have the ability to laugh at i ...
- usb 键盘码表_键盘鼠标对应码表-delphi键值
在操作API的时候很多时候需要用到我们键盘上的按键,这里是对照的 常数名称 十六进制值 十进制值 对应按键 VK_LBUTTON 01 1 鼠标的左键 VK_RBUTTON 02 2 鼠标的右键 VK ...
- 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题
一.问题描述 UITableView分割线要显示到最左端 查看UITableView的属性,发现设置separatorInset的值可以自定义分割线的位置. @property (nonatomic) ...
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?...
<Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?> <Java中的值传递和引用传递> 原理知识: 如果参数类型是原始类型,那么传过来的就是这 ...
- java的整数扩展,浮点数扩展,字符扩展,转义字符,布尔值扩展
java的整数扩展,浮点数扩展,字符扩展,转义字符,布尔值扩展 public static void main(String[] args) {//整数扩展 进制 二进制0b 十进制 八进制0 十六进 ...
- 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
遍历 遍历就是把这个数组的每个元素 显示出来 遍历的方法就是先定义这个数组的大小,然后用FOR循环来完成数组,例如 double[] score = new double[5];Scanner inp ...
最新文章
- is 和 ==的区别
- 17.4.28 清北第一天水题
- 【JavaSE_06】Java中的数组(array)-思维导图
- ITK:查找图像的更高导数
- 算法不会,尚能饭否之排序——折半插入排序(Binary Insert Sort)
- spring异常处理器
- 智慧校园供水系统智能管理
- 利用“微PE”自制PE可引导iso
- UNIX 环境高级编程读书笔记(1)
- 如何在笔记本电脑上搭建双系统(windows与linux)
- 深入理解GatewayWorker框架
- 十年测试老司机带你应对68道面试题---文章转载自 TesterHome
- python 证件照换背景色(蓝底->白底,蓝底->红底)
- 用matlab实现熵权法,熵权法原理及matlab代码实现
- JS 中关于Promise的用法,状态,执行顺序详解,面试可用(原创)
- Python从入门到精通之面向对象
- 在您所指定的角色服务器,指定 RD 会话主机服务器的远程桌面授权模式
- 周四见|《SQL开发中容易被忽略的BUG》by郑老师
- C# 2.0 泛型编程
- 史上最简单的docker入门到放弃——(利用docker部署web应用)