什么是 值传递,地址传递和引用传递 有什么区别
来源:互联网 发布:数据稀疏问题 编辑:程序博客网 时间:2024/05/17 09:00
什么是值传递,地址传递和引用传递?它们有什么不同?这在学校考试,找工作面试中都是常见的问题。它们之间的区别容易搞错,长时间不用也容易忘记。最近又被问到这个问题,想想还是整理一下记下来,也方便以后参考。
首先,看以下三段代码。
1.
输出结果是什么?
---
x=7, y=2
a=2, b=7
2.
---
*px=7, *py=2
a=7, b=2
3.
---
x=7, y=2
a=7, b=2
接下来,分析一下为什么是这样的结果呢?
上面的1,2,3分别是值传递,地址传递,和引用传递。
先看值传递。swap1函数的操作是将x,y进行对调。需要注意的是,对形参的操作不会影响到a,b。我们可以设想,在swap1函数执行语句的最前面,隐含地存在x=a; y=b;这两条语句,这样就便于理解了。当a,b把值赋给x,y之后,对x,y不论再做什么操作,都不会影响到a,b本身。
再看地址传递。注意,这时的函数的声明和调用的写法与值传递不同。
函数声明:swap2(int *px, int *py)
函数调用:swap2(&a, &b)
但是与值传递的分析一样,我们同样可以设想,在swap2函数里,隐含地存在px=&a; py=&b;这两条语句,这表示a的地址代入到了px,b的地址代入到了py。这样一来,对*px, *py的操作就是a,b本身的操作。所以a,b的值被对调了。
接下来看引用传递。先看函数的声明和调用的写法,函数调用和值传递的写法是一样的,但是函数声明是不一样的。
函数声明:swap3(int &x, int &y)
函数调用:swap3(a, b)
因为定义的x,y前面有&取地址符,调用函数swap3时,a,b分别代替了x,y,即x,y分别引用了a,b变量。因此,函数里的操作,实际上是对实参a,b本身的操作,其值发生了对调。
- 什么是 值传递,地址传递和引用传递 有什么区别
- Java值传递和引用传递有什么区别
- 数据类型、值传递和引用传递有什么区别,String是什么传递?
- 值传递,地址传递和引用传递
- 函数的传参方式有值传递和地址传递,地址传递又分为指针传递和引用传递。
- java中的值传递和引用传递到底有什么区别
- java中的值传递和引用传递到底有什么区别
- java中的值传递和引用传递到底有什么区别
- 什么是值传递和引用传递
- 值传递/地址传递/引用传递的区别【转】
- 什么是值传递、引用传递、指针传递
- C++值传递和引用传递.地址传递
- C 值传递、地址传递、引用传递
- 值传递,地址传递,引用传递
- c++值传递、地址传递、引用传递
- 值传递、地址传递,引用传递
- 值传递,地址传递,引用传递
- 值传递、引用传递、地址传递辨析
- 手机端访问第三方java服务器后判断是否进行OAuth2.0网页微信公众号授权认证
- 133. Clone Graph
- 我想学编程——向所有想学编程的人推荐《啊哈c语言》
- 微信开发之外网映射工具
- echarts 图表可配置展示功能 word 功能描述
- 什么是 值传递,地址传递和引用传递 有什么区别
- PHP如何调用Delphi开发的DataSnap/Restful接口服务
- Markdown--从入门到精通
- Cursor的moveToNext和moveToFirst
- 服务器搭建testlink (nginx php mysql环境) 心得分享
- Android系统防火墙开发一(1)功能介绍
- 学习笔记之java.math.bigdecimal类的精确计算
- poj1236 Network of Schools(tarjan缩点)
- 整数排序-LintCode