函数调用的值传递和引用传递

来源:互联网 发布:qq三国js转职哪个好 编辑:程序博客网 时间:2024/06/08 08:08

函数调用的作用:

 ·用实参数向形式参数传递数据;

 ·为获得数据参数及在函数体中声明的变量分配存储空间;

 ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调函数。

当参数表为空时,表示该函数不从调用函数接受数据。

 

函数参数传递机制:

堆栈存储区是主调函数(过程)和被调用函数(过程)在调用发生时进行通信的主要区域。

基本的参数传递机制有两种:值传递和引用传递。

 

值传递(passl-by-value):

被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。指针变量作函数参数也要最循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。——当形参为指针变量的时候,要区别于引用传递,指针变量通过值传递过来的是一个地址的值,在被调函数中,只是修改了内存地址中存放的值,而并没有修改地址值

在C语言中,值传递是唯一可用的参数传递机制。

 

引用传递(pass-by-reference):

被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

 

特殊情况:常参数的传递

在应用中参数经常使用常指针和常引用,这样的参数称为常参数,使用参数不会更新某个参数指向的对象,在参数传递的过程中就不需要执行复制构造函数,从而改善效率。

c++ 中经常使用的是常量引用,如 Swap2(const int& x; const int& y)

这时将不能在函数中修改引用地址所指向的内容,具体来说,x和y将不能出现在"="的左边(左值)。

 

 

0 0
原创粉丝点击