昊虹君 发表于 2022-10-26 10:35

C/C++函数形参传实参时值传递、指针传递、引用传递的区别?

C/C++函数参数传递时值传递、指针传递、引用传递的区别是什么?

值传递:形参是实参的副本(复制、拷贝),形参值的改变不会影响实参的值,大家初学函数时接触到的第一个传参例子都为这种。

指针传递:形参是指针类型,形参作指针运算后指向的就是实参,所以会影响实参的值。

引用传递:在调用函数时将实参的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实参的值。

引用传递与指针传递的区别:
引用传递是把实参的内存引用空间(所谓引用空间,即数据在内存中的地址)传递给形参,形参与实参具有相同的引用空间,引用传递在函数定义和调用时并没有用到指针运算符。
而指针传递传递的是指针值,实参和形参都是指针,指针传递时要用到指针运算符进行相关数据的操作。指针操作是容易出问题的,通常我们能避免指针操作就避免指针操作,所以通常我们用的都是值传递和引用传递。

下面对三种情况分别举例:

值传递的例子:
void swap(int a,int b)//形参也可以是对象之类的哦
{
   int temp;
   temp=a;
   a=b;
   b=temp;
   cout<<a<<’ ‘<<b<<’\n’;
}

int main(){
    int x=1;
    int y=2;
    swap(x,y);
    cout<<x<<’ ‘<<y<<’\n’;
   
    return 0;
}
运行结果是2,1 和1,2,函数swap()没有改变实参x、y的值。

指针传递的例子:
void swap(int *a,int *b)
{
   int temp;
   temp=*a;
   *a=*b;
   *b=temp;
   cout<<*a<<’ ‘<<*b<<’\n’;
}

int main(){

    int x=1;
    int y=2;
    swap(&x,&y);
    cout<<x<<’ ‘<<y<<’\n’;

}
运行结果是:2,1和2,1,函数swap()改变了实参x、y的值。


引用传递的例子:
void swap(int &a,int &b)
{
   int temp;
   temp=a;
   a=b;
   b=temp;
   cout<<a<<’ ‘<<b<<’\n’;
}

int main(){
   
    int x=1;
    int y=2;
    swap(x,y);
    cout<<x<<’ ‘<<y<<’\n’;
    return 0;
}
运行果结果:2,1和2,1,函数swap()改变了实参x、y的值。


扩展阅读:
为什么引用传递的参数名前通常都用const作了修饰?

页: [1]
查看完整版本: C/C++函数形参传实参时值传递、指针传递、引用传递的区别?