C/C++培训
美国上市C/C++培训机构

400-111-8989

热门课程

C/C++参数传递机制知识详解

  • 发布:C++培训
  • 来源:资料库
  • 时间:2017-08-17 14:20

参数传递在c++中是一个非常常见的机制,常用的参数传递包括值传递、指针传递和引用传递。当然,在阐述上面三种参数传递之前,根据后面会出现的一些特有名词,对它们进行一波解释。

实参:顾名思义--“实际参数”,是在我们调用函数时传递给函数的值,因为它是实际的,所以必须得有确定的值,它可以为常量、变量、表达式或者函数

形参:顾名思义--“形式参数”,是在定义函数名或者函数体的时候使用的参数,目的是为了接受调用函数时传递进来的实际参数。形参相对于实参就像用模型机做面包,实参(面包)放入形参(模型)中,在面包机中做出各种形状的面包,面包的形状受模型控制,但可以自己决定用什么面料、颜色、或者馅儿来做面包。即面包是实际存在的,模型只是一个抽象的形状慨念。

计算机命令运行机制:计算机所有的命令都是在内存上完成的。

好了!墨迹完了,进入正题了!

(1)值传递

形参是实参的拷贝。我们都知道在计算机里各种命令的运行都是在内存上完成的,在值传递过程中,实参和形参位于内存两个不同的地址中,实参将自己复制然后拷贝给形参,函数在调用过程中,一切的操作都是在形参的内存地址上进行的,所以不会对实参有任何影响。也就是说在此时形参和实参两个内存的地址是不一致的。正因为形参是实参拷贝过来的,形参由实参赋予内存地址,没有实参就不会存在形参。没有形参在栈上的内存,函数的操作就无法进行,所以,值传递中是单向的(实参-形参),参数的值只能传入,而不能传出。

采用情况:修改函数内部参数时,不会影响到外部调用的情况下

(2)指针传递

形参是指向实参内存地址的指针。这就很容易明白,此时形参和实参的内存地址是一致的,在计算机里的所有命令只认内存地址的情况下,指针传递直接改变的就是实参的地址,所以改变形参会影响到实参的值,对形参的操作相当于作用于实参,因为不管怎么改变他们两个的地址始终保持一致。我们也可以说指针传递是值传递的一个类,只不过他比较特殊,传递的是实参的地址

采用情况:修改函数内部参数时,希望影响到外部调用的情况下

(3)引用传递

形参是实参的一个别名,但他们本质上还是一样的,内存地址一致,对形参的操作本质上就是对实参的操作。形参虽然也在内存上占有空间,但它还是用的实参的地址,在函数操作时相当于对形参进行了一波间接寻址,直接调用了传进来的实参,所以改变形参的话也会改变实参。

采用情况:修改函数内部参数时,希望影响到外部调用的情况下

是不是有点蒙圈?不要怕,没什么事是一个c++程序解决不了的。如果有,那就两个!



可以看出,实参的地址002EF8D8

采用值传递的时候,函数操作的地址是002EF804,并不是实参本身地址,所以可以看出对形参的操作并不能改变实参的值。

采用指针传递的时候,函数操作的就是实参本身的地址002EF8D8,我们可以知道对形参的操作是可以改变实参的值的。

采用引用传递的时候,同样的操作地址也是实参的地址002EF8D8。

细心的小伙伴们肯定也发现了,指针传递和引用传递采用情况都一样,那我在用的时候怎么知道具体用哪个呢?问的好!发现的也好!继续保持我相信你一定会是下一个比尔.盖茨!

(4)指针和引用的异同

1.引用在被创建的同时必须被初始化,但是指针就不用,它可以随时初始化

2.引用不能是NULL,但我们都知道指针是可以NULL的

3.引用一旦初始化后,就不能改变它引用的对象,但指针可以随时改变指向的对象(引用-从始至终 指针-见异思迁)

4.指针和引用都是地址的概念,他们始终在跟地址打交道

5.指针是一个实体,它真是存在的,但引用就只是被引用对象的一个别名,虚的


预约申请免费试听课

上一篇:C语言的代码风格和注意事项
下一篇:C语言学习之算法的概念及其表示知识

C++怎么自学

C++开发5款辅助工具

C++关键字说明及比较

适合C/C++新手练手的项目

选择城市和中心
贵州省

广西省

海南省