值传递

值传递的实质

  • 将实参的值(a、b)复制到形参(m、n)相应的存储单元中,即形参和实参分别占用不同的存储单元。

值传递的特点

  • 值传递的特点是单向传递,即主调函数被调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。

代码演示:

#include<iostream>
using namespace std;
//值传递
void swap1(int m,int n){//m、n为形参int temp;//被调函数temp=m;m=n;n=temp;cout<<m<<n<<endl;
}
int main(){//主调函数int a=12;int b=18;swap1(a,b);//a、b为实参cout<<a<<b<<endl;
}

 运行结果:

值传递中的隐含过程

 int m = a;int n = b;

swap1函数交换的是m和n,而原来的a值和b值从未改变(图中x→m,y→n)


地址传递

地址传递的实质

  • 所谓的地址传递,指的就是函数的参数是数组名或者指针。传递的是数组的首地址或指针的值,而形参接收到的是实参的地址,即指向实参的存储单元,形参和实参占用相同的存储单元,所以形参和实参是相同的。

特点

  • 形参并不存在存储空间,编译系统不为形参数组分配内存。因此在数组名或指针作函数参数时所进行的传送只是地址传送,形参在取得该地址之后,与实参共同拥有一段内存空间,形参的变化也就是实参的变化。

代码演示:

#include<iostream>
using namespace std;
void swap2(int*m,int*n){//*m表示通过m这个指针访问它所指向的这个单元内容,即*m≈a,*n同理int temp;temp=*m;*m=*n;*n=temp;//这里交换的是指向的内容而不是地址(传地址,该内容)cout<<*m<<*n<<endl;
}
int main(){int a=12;int b=18;swap2(&a,&b);cout<<a<<b<<endl;
}/
//main函数和swap2函数共用a,b变量的储存空间,只不过在main函数中,用a,b访问此空间;
//而在swap2函数中,则用*m,*n这种间接访问方式访问此空间。

 运行结果:

注:*m表示通过m这个指针访问它所指向的这个单元内容,即*m≈a,*n同理。

 地址传递中的隐含过程

 m = &a;n = &b;

分别将a的地址,b的地址赋值给m和n,这样swap2函数操作的其实是a和b的地址,相当于操作了a和b。

对形参和实参关系不了解的,请看形参如何改变实参

引用传递

前言:请熟知引用的用法,参考http://t.csdn.cn/fiUsM

引用传递的实质

形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。

形参的地址是实参地址的映射,即拥有不同的储存空间但是里面存放的地址相同。

特点

被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

例:

#include<iostream>
using namespace std;void f(int & a){a = 3;}int main(){int b = 5;f(b);cout << b << endl;return 0;
}

运行结果:b=3

总结:

值传递:形参开辟内存空间,与形参不同的地址,不能改变值。(变量名的访问)

地址传递:形参不开辟内存空间,与形参相同的地址,能改变值。(地址的访问)

引用传递:形参开辟内存空间,与形参相同的地址,能改变值。

笔记使用,侵删。

值传递,地址传递,引用传递相关推荐

  1. 按值传递和按引用传递的区别_c++按值、地址、引用传递参数

    在现实生活中,"地址"指的是我们居住在某条街上的某个小区的某栋某楼某室: 而在计算机中,"地址"指的是一个.一些数据在内存中储存的位置.比如我们之前讲到的指针, ...

  2. 【Qt】信号和槽对值传递参数和引用传递参数的总结

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  3. [转载] java中对象作为参数传递给一个方法,到底是值传递,还是引用传递

    参考链接: 用Java传递和返回对象 看完绝对清晰~ java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? pdd:所谓java只有按值传递:基本类型  值传递:引用类型,地址值传递,所 ...

  4. qt槽函数如何传递多个参数_【Qt】信号和槽对值传递参数和引用传递参数的总结...

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  5. 值传递,还是引用传递(实践是检验真理的唯一标准)

    package com.c9;import java.util.ArrayList;//值传递,还是引用传递? /* 1, list,保持一致:有效2,实体bean,保持一致,有效3, string, ...

  6. 递归中的引用传递和常引用传递

    通过递归加深引用传递和常引用传递的区别,同时加深递归回溯的过程 void process(string& str) {if (str.size() >= 5) {cout << ...

  7. 【基础中的基础】引用类型和值类型,以及引用传递和值传递

    一直在博客园怼人,非常惭愧.所以郑重决定: 好好写一篇干货,然后再接着怼人. 这是一起帮上陈百万同学的求助,讲了一会之后,我觉得很有些普世价值,干脆就发到园子来.面向小白,高手轻拍. 我们从最简单的说 ...

  8. java还值_Java到底是引用传递还是值传递

    前言 前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢? public void test(){ String str = "hello"; change(str); S ...

  9. 什么是值传递?什么是引用传递?

    值传递是传递变量的值,并不会改变方法外变量的值:引用传递是传递对象的地址,会改变对象本身的值: 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用 ...

  10. Java 函数传递对象是引用传递还是值传递?

    class A {int val; }public class main {public static void fun(A a, A b) {// a.val = 6;a = b;}public s ...

最新文章

  1. mysql 返回的查询结果为空 (即零行)._Mysql数据同步(单向)
  2. Unity3D 之NGUI各种脚本及应用
  3. 5G时代谁的天下???
  4. java 代码压缩javascript_通过Java压缩JavaScript代码实例分享
  5. 分析日志下载时间脚本
  6. 放弃使用 15 年的 macOS,我决定换成 Linux!
  7. java hibernate4 学习心得
  8. HashMap--并发下死循环(HashMap不能在多线程下使用)
  9. python @符号_用Python学数学之Sympy代数符号运算
  10. 对校招生培养工作的建议_对学校人才培养工作有哪些意见和建议
  11. 《现代控制系统》第四章——反馈控制系统特性 4.3 控制系统对参数变化的敏感程度
  12. pxc部署和配置详解
  13. js距离米转换为千米_千米换算(千米与米之间的换算题)
  14. 无法同步谷歌日历_这场科技发布会上,谷歌究竟更新了啥?
  15. ubuntu 16.04+Titan Xp + Cuda 9.0 + Cudnn 7.0 + Caffe
  16. C++校内模拟赛-06水题
  17. python求高阶导数_求导法则和高阶导数
  18. Owin + WebApi + OAuth2 搭建授权模式(授权码模式 Part I)
  19. 音视频封装到MP4/MP3ffmpeg(十四)
  20. C# 定时任务 调度框架 WebWork (Quartz.NET) Web版的Windows服务

热门文章

  1. K. chino with c language(水题)
  2. mac下安装depot_tools
  3. Linux 磁盘坏块修复处理(错误:read error: Input/output error)
  4. 简易计算机绘图,电脑绘画简易教程——原野
  5. dhcp服务器响应慢,请教下大家DHCP获取慢的原因和解决思路
  6. 由“微博”的发展史预测“轻博客”的命途
  7. 数数字Digit Counting(Python)
  8. 22个值得收藏的android开源代码-UI篇,kotlin类型转换
  9. java 1900,java识别1900年时间的有关问题【急】
  10. 最近爆火的高德AR导航!别告诉我你是最后一个知道的