博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猜测引用传递和值传递的实际工作模式
阅读量:5776 次
发布时间:2019-06-18

本文共 689 字,大约阅读时间需要 2 分钟。

hot3.png

故事还是从一个经典的场景展开,有一个函数

void modify(int a) { a = 10; } 然后有一个这样的调用 int a = 0; modify(a); 那么a现在到底是多少呢?答案是0,没有变化 不管是C,C++还是java,都会解释说由于是int,所以是按照值传递的方式,如果这里的int ,用址传递,就会改变原来的值,我个人觉得,这样的解释虽然能说得通,但总感觉有一些模糊的东西在里面,为什么用int 和int要用不同的方式来处理呢? 我猜测,栈的调用过程调用应该是这样的: 手画,比较丑

不管入参a是什么类型,先做一个这样的赋值操作,a' = a,然后把a'压到栈里面进行函数调用。 于是,我们可以从这个模型有一些推测, 推论1:如果在函数里面有关于a' = 的操作,比如上面的a = 0,只是改变了a'本身的值,和a没有任何关系。 推论2:如果a是某个对象,并且函数里面使用了a'的方法,由于a'和a本质上都是a对象的引用,所以a'使用方法,本质上也是a使用方法。 推论3:如果a是数组,比如java里的int[],传进去的是数组的头指针,那么如果赋值,a[0] = 1这类的操作,可以改变数组本身的值。

猜测和实际的结果相符吗?自己试一下,想一下 PS:不相符我会写这个博客?至少C,C++,JAVA,PYTHON都是这样的。函数编程号称不改变状态,所以,显然也满足上面的猜测。 最终推论:那么我们是不是可以再猜测一下,写编译器的那些人,思路基本都是一样的?哈哈

转载于:https://my.oschina.net/yangcol/blog/222679

你可能感兴趣的文章
react报错this.setState is not a function
查看>>
poj 1183
查看>>
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
java中关于重载与重写的区别
查看>>
最受欢迎的14款渗透测试工具
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
黑马day11 不可反复度&解决方式
查看>>
分布式服务化系统一致性的“最佳实干”--转
查看>>
一次Mutex死锁的原因探究
查看>>
flask的文件上传和下载
查看>>
如何查看java class文件的jdk版本
查看>>
ImportError: cannot import name UnrewindableBodyError
查看>>