函数中值,指针,引用传递

函数中值,指针,引用传递

ID:41956823

大小:67.50 KB

页数:7页

时间:2019-09-05

函数中值,指针,引用传递_第1页
函数中值,指针,引用传递_第2页
函数中值,指针,引用传递_第3页
函数中值,指针,引用传递_第4页
函数中值,指针,引用传递_第5页
资源描述:

《函数中值,指针,引用传递》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C++值传递、指针传递、引用传递详解最近写了儿篇深层次讨论数纽和指针的文章,具屮提到了''C语言屮,所有非数纽的形式参数传递均以值传递形式〃数组和指针背后一内存角度语义”陷阱—…数组和指针而关于值传递,指针传递,引用传递这几个方面还会存在谋区,所有我觉的有必要在这里也说明一下~卜-文会通过例子详细说明哦值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并冃•不希望这个改变影响调丿IJ者时,采用值传递。指针传递:形参为指向实参地址的指

2、针,当对形参的指向操作时,就相当于对实参木身进行的操作引用传递:形参相当于是实参的''别名〃,对形参的操作其实就是对实参的操作,在引用传递过程屮,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进來的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈小存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。理论性的就不多说,卜•面的代码对此作出了细致解释(从实参,形参在内存中存放地址的角度说明了问题的本质,容易理解)毛I1#include

3、stream>2usingnamespacestd;3〃值传递4voidchangel(intn){5cout«M值传递-函数操作地址”vv&nvvendl;〃显示的是拷贝的地址而不是源地址1n++;2}89〃引用传递10voidchange2(int&n){11cout«n引用传递一函数操作地址”vv&n«endl;12n++;13}14〃指针传递15voidchange3(int*n){16cout«n指针传递-函数操作地址n«n«endl;17*n=*n+l;18}19intmain(){20intn=10;21cout«"实参的地址”vv

4、&n«endl;22changel(n);23cout«nafterchange1()n="«n«endl;24change2(n);25cout«"afterchange2()n="«n«endl;26change3(&n);27coutvv”af(erchange3()n=n«n«endl;28returntrue;29}笔l运行结果如下,(不同的机器可能会有所差别)实参的地址0x22ff44函教操祜地址0x22£f20afterchangel<>n=10引用]专递一函数操作地址0x22ff44afterchange2<>n=ll指针衿递一函

5、数操作地址0x22£f44aFt"change3<>n=12信按任意键继续・・・可以看岀,实参的地址为0x22ff44采用值传递的时候,函数操作的地址是0x22ff20并不是实参本身,所以对它进行操作并不能改变实参的值再看引用传递,操作地址就是实参地址,只是相当于实参的一个别名,对它的操作就是对实参的操作接下來是指针传递,也可发现操作地址是实参地址那么,弓I用传递和指针传递有什么区别吗?引用的规则:(1)引川彼创建的同时必须被初始化(指针则口J以在任何时候被初始化)。(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。

6、(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。指针传递的实质:指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变虽进行,不会影响主调函数的实参变量的值。(这里是在说实参指针本身的地址值不会变)如果理解不了大可跳过这段指针传递和引用传递一般适用于:函数内部修改参数并且希望改动影响调用者。对比指针/引用传递可以将改变

7、由形参''传给〃实参(实际上就是直接在实参的内存上修改,不像值传递将实参的值拷贝到另外的内存地址中才修改)。另外一种用法是:当一个函数实际需要返回多个值,而只能显式返回一个值时,可以将另外需要返回的变量以指针/引用传递给函数,这样在函数内部修改并口返回后,调用者可以拿到被修改过后的变量,也相当于一个隐式的返回值传递吧。以下是我觉得关于指针和引用写得很不错的文章,大家可参照看一下,原文出处地址:http://xinklabi・iteve.com/bloq/653643从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改

8、变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。