【老生常谈】函数传参的几种方式优劣比较

本文通过示例详细对比了C语言的值传递与C++中的值传递及引用传递的区别。演示了如何在C++中使用引用传递来直接修改原始变量的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 明确函数传参的两种方式

    值传递(pass-by-value)和引用传递(pass-by-reference)

  • 明确C和C++的传值方式

    C语言只有值传递(pass-by-value),而C++实现了值传递(pass-by-value)和引用传递(pass-by-reference)

  • C与C++的实现demo

C的实现

#include <stdio.h>
#include <stdlib.h>

void Swap(int *a,int *b);
int main(int argc,char *argv[])
{
    int a=1,b=2;
    int *p1=&a,*p2=&b;
    printf("Before Swap! p1=[%x],p2=[%x]\n",p1,p2);
    Swap(p1,p2);
    printf("After Swap! p1=[%x],p2=[%x]\n",p1,p2);
    getch();
    return 0;
}

void Swap(int *a,int *b)
{
    int tmp;tmp=*a;*a=*b;*b=tmp;
    return;
}

描述:运行之后,会发现,在调用Swap(p1,p2)前后,参数p1,p2的值并未发生变动。

C++实现

#include <stdio.h>
#include <stdlib.h>

void Swap(int& a, int& b);
int main(int argc,char *argv[])
{
    int a=1,b=2;
    printf("Before Swap! a=[%x],b=[%x]\n",&a,&b);
    Swap(a,b);
    printf("After Swap! a=[%x],b=[%x]\n",&a,&b);
    getchar();
    return 0;
}

void Swap(int& a, int& b)
{
    int tmp;tmp=a;a=b;b=tmp;
    return;
}

描述:这个函数中,Swap里面实现的是对两个整型变量地址的操作。这样,肯定就是引用传递了。此时在Swap里面更改a、b的值,也会体现在main函数里面。

 

总结:说了这么多,其实也是很简单的东西。那么为了证明什么呢?

1.在值传递的时候,被调用函数是不会改变自身的参数的。

2.在引用传递的时候,被调用函数很有可能改变传入的参数,同时将情况反映到主函数中。若想不被改变,则需要在参数前面加上const,控制一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值