函数的值传递、指针传递、引用传递
值传递
形参是实参的拷贝,该表形参的值并不会影响外部的实参。值传递是单向的(实参-->形参),参数的值只能传入,不能传出。当函数内部需要修改参数并且不影响调用者时,采用值传递。
void Exchange(int a,int b){
int tmp;
tmp = a;
a = b;
b = tmp;
}
int m = 3,n = 54;
Exchange(m,n); //不会改变m,n的值。形参a,b和变量tmp在Exchange被调用时在栈中被开辟,调用结束后被销毁,传值进来不会影响原先的变量m,n
指针传递
形参为指向实参的地址,当对形参的指向操作时,相当于对实参本身进行操作。
指针传递方式与值传递方式类似,只不过传的是变量的地址值。
void ExchangeP(int *pa,int *pb){
int tmp;
tmp = *pa;
*pa = *pb; //地址不能乱改不能写成pa = pb;
*pb = tmp;
}
int m = 3,n = 54;
ExchangeP(&m,&n);
引用传递
形参相当于实参的别名,对形参的操作其实就是对实参的操作,虽然在调用函数时也为形参开辟了内存空间,但是存放的是实参的地址,被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问实参变量。所以被调函数中所有对形参的操作都影响着实参。
void Exchange_(int &pa,int &pb){
int tmp;
tmp = pa;
pa = pb;
pb = tmp;
}
int m = 3,n = 54;
Exchange_(m,n); //函数调用时也会为形参开辟内存空间,但是里面存放的是实参的地址
参考链接: