C++面试常见问题——15函数的值传递、指针传递、引用传递

函数的值传递、指针传递、引用传递

值传递

形参是实参的拷贝,该表形参的值并不会影响外部的实参。值传递是单向的(实参-->形参),参数的值只能传入,不能传出。当函数内部需要修改参数并且不影响调用者时,采用值传递。

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);     //函数调用时也会为形参开辟内存空间,但是里面存放的是实参的地址

参考链接:

  1. [C++ 值传递、指针传递、引用传递详解]

猜你喜欢

转载自www.cnblogs.com/ziyuemeng/p/12358540.html