c++中函数参数的传递方式
所谓c++中的参数传递,是指用实参来给形参赋初始值的过程。
在C++中调用函数时,按形参种类划分了四种参数传递方式:
(1)值传递;
(2)址传递(指针传递);
(3)引用传递;
(4) 全局变量传递;
一、值传递
值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理。值传递的过程,简单来说,就是在堆栈中新开辟一段内存交给形参,然后将实参的值赋给形参,从而形成了实参的一个副本。接着被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
int main( )
{
void swap(int,int); //函数声明
int i=3,j=5;
swap(i,j); //调用函数swap
return 0;
}
void swap(int a,int b) //企图通过形参a和b的值互换,实现实参i和j的值互换
{
int temp;
temp=a; //以下3行用来实现a和b的值互换
a=b;
b=temp;
}
二、指针传递
如果在函数定义时将形参说明成指针,对这样的函数进行调用时就需要传入地址值形式的实参。这时的参数传递方式就是地址传递方式。
地址传递与按值传递的不同在于,它用实参中存储的地址来给对应的形参赋值,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
#include <iostream>
using namespace std;
void swap(int*, int*);
int main(){
int a = 3, b = 4;
cout << "a=" << a << ", b=" << b << endl;
swap(&a, &b);
cout << "a=" << a << ", b=" << b << endl;
system("pause");
return 0;
}
void swap(int *x, int *y){
int t = *x;
*x = *y;
*y = t;
}
三、引用传递
引用传递的形参,是对于传入函数的实参建立的对应的引用,简单来说,就是用不同的名字表示同一段内存地址上的数据。引用类型的形参与相应的实参占用相同的内存空间,改变引用类型形参的值,相应实参的值也会随着变化。
int main( )
{
void swap(int &,int &);
int i=3,j=5;
swap(i,j);
return 0;
}
void swap(int &a,int &b) //形参是引用类型
{
int temp;
temp=a;
a=b;
b=temp;
}