温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中的传参方式

发布时间:2020-07-23 18:29:10 来源:网络 阅读:386 作者:张丹CTO 栏目:编程语言

1、参数传递的概念 

所谓参数传递就是用函数调用所给出的实参(实际参数)函数定义所给出的形参(形式参数)设置初始值的过程。

在c++中,调用函数时有三种参数传递方式,分别为:

(1)传值调用;

(2)传址调用(即是传指针);

(3)传引用

    总体上参数传递可以分为两类,由形参的类别决定:值调用与引用调用。除了定义为引用类型的形参外,其他类型的形参都是对应着值调用。指针传递也是值调用,只是它是值传递的是地址。下面对这三种参数传递方式进行详细的说明:

值传递:

    值传递时,实参被拷贝了一份,然后在函数体内使用,函数体内修改参数变量时修改的只是实参的一份拷贝,而实参本身没有改变,所以如果想要在调用的函数中修改实参的值,使用值传递不能达到其目的,这时只能使用引用或者指针传递。下面代码可以说明:

void swap(int a ,int b )      //此时传递的实参i与j的值在这里只是一份拷贝,交换的是他们的拷贝的值,而不是实参本身,出了这个函数的作用域之后,他们的拷贝值被销毁,因此i与j的值根本就没有交换。

{

             int temp = 0;

            temp = a;

             a = b;                                                            

             b = temp;

}


int main()

{

             void swap( int, int);

             int i = 10;

             int j = 20;

            swap(i, j);

            cout << "i=" << i << endl;

            cout << "j=" << j << endl;

            system( "pause");

             return 0;

}

C++中的传参方式

C++中的传参方式


引用传递:

int main()

{

             void swap( int &, int &);

             int i = 10;

             int j = 20;

            swap(i, j);

             return 0;

}

void swap(int &a , int &b )

{

             int temp;

            temp = a;

             a = b;

             b = temp;

}

下面是此段代码的汇编代码:

int main()

{

00824410  push        ebp 

00824411  mov         ebp,esp 

00824413  sub         esp,0DCh 

00824419  push        ebx 

0082441A  push        esi 

0082441B  push        edi 

0082441C  lea         edi,[ebp-0DCh] 

00824422  mov         ecx,37h 

00824427  mov         eax,0CCCCCCCCh 

0082442C  rep stos    dword ptr es:[edi] 

0082442E  mov         eax,dword ptr ds:[0082F000h] 

00824433  xor         eax,ebp 

00824435  mov         dword ptr [ebp-4],eax 

            void swap(int &, int &);

            int i = 10;

00824438  mov         dword ptr [i],0Ah 

            int j = 20;

0082443F  mov         dword ptr [j],14h 

            swap(i, j);

00824446  lea         eax,[j] 

00824449  push        eax 

0082444A  lea         ecx,[i] 

0082444D  push        ecx 

0082444E  call        swap (08214A1h) 

00824453  add         esp,8 

C++中的传参方式C++中的传参方式







向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI