C/C++培训
达内IT学院
400-996-5531
参数传递在c++中是一个非常常见的机制,常用的参数传递包括值传递、指针传递和引用传递。当然,在阐述上面三种参数传递之前,根据后面会出现的一些特有名词,对它们进行一波解释。
实参:顾名思义--“实际参数”,是在我们调用函数时传递给函数的值,因为它是实际的,所以必须得有确定的值,它可以为常量、变量、表达式或者函数
形参:顾名思义--“形式参数”,是在定义函数名或者函数体的时候使用的参数,目的是为了接受调用函数时传递进来的实际参数。形参相对于实参就像用模型机做面包,实参(面包)放入形参(模型)中,在面包机中做出各种形状的面包,面包的形状受模型控制,但可以自己决定用什么面料、颜色、或者馅儿来做面包。即面包是实际存在的,模型只是一个抽象的形状慨念。
计算机命令运行机制:计算机所有的命令都是在内存上完成的。
好了!墨迹完了,进入正题了!
(1)值传递
形参是实参的拷贝。我们都知道在计算机里各种命令的运行都是在内存上完成的,在值传递过程中,实参和形参位于内存两个不同的地址中,实参将自己复制然后拷贝给形参,函数在调用过程中,一切的操作都是在形参的内存地址上进行的,所以不会对实参有任何影响。也就是说在此时形参和实参两个内存的地址是不一致的。正因为形参是实参拷贝过来的,形参由实参赋予内存地址,没有实参就不会存在形参。没有形参在栈上的内存,函数的操作就无法进行,所以,值传递中是单向的(实参-形参),参数的值只能传入,而不能传出。
采用情况:修改函数内部参数时,不会影响到外部调用的情况下
(2)指针传递
形参是指向实参内存地址的指针。这就很容易明白,此时形参和实参的内存地址是一致的,在计算机里的所有命令只认内存地址的情况下,指针传递直接改变的就是实参的地址,所以改变形参会影响到实参的值,对形参的操作相当于作用于实参,因为不管怎么改变他们两个的地址始终保持一致。我们也可以说指针传递是值传递的一个类,只不过他比较特殊,传递的是实参的地址
采用情况:修改函数内部参数时,希望影响到外部调用的情况下
(3)引用传递
形参是实参的一个别名,但他们本质上还是一样的,内存地址一致,对形参的操作本质上就是对实参的操作。形参虽然也在内存上占有空间,但它还是用的实参的地址,在函数操作时相当于对形参进行了一波间接寻址,直接调用了传进来的实参,所以改变形参的话也会改变实参。
采用情况:修改函数内部参数时,希望影响到外部调用的情况下
是不是有点蒙圈?不要怕,没什么事是一个c++程序解决不了的。如果有,那就两个!
可以看出,实参的地址002EF8D8
采用值传递的时候,函数操作的地址是002EF804,并不是实参本身地址,所以可以看出对形参的操作并不能改变实参的值。
采用指针传递的时候,函数操作的就是实参本身的地址002EF8D8,我们可以知道对形参的操作是可以改变实参的值的。
采用引用传递的时候,同样的操作地址也是实参的地址002EF8D8。
细心的小伙伴们肯定也发现了,指针传递和引用传递采用情况都一样,那我在用的时候怎么知道具体用哪个呢?问的好!发现的也好!继续保持我相信你一定会是下一个比尔.盖茨!
(4)指针和引用的异同
1.引用在被创建的同时必须被初始化,但是指针就不用,它可以随时初始化
2.引用不能是NULL,但我们都知道指针是可以NULL的
3.引用一旦初始化后,就不能改变它引用的对象,但指针可以随时改变指向的对象(引用-从始至终 指针-见异思迁)
4.指针和引用都是地址的概念,他们始终在跟地址打交道
5.指针是一个实体,它真是存在的,但引用就只是被引用对象的一个别名,虚的
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved