昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 1051|回复: 0
收起左侧

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

[复制链接]

249

主题

252

帖子

976

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
976
昊虹君 发表于 2022-10-26 10:35 | 显示全部楼层 |阅读模式
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的值。

指针传递的例子:
[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’;
 
}

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


引用传递的例子:
[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和2,1,函数swap()改变了实参x、y的值。


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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2024076726 )

GMT+8, 2024-9-8 12:53 , Processed in 0.019567 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表