图解C/C++中函数参数的值传递、指针传递与引用传递

本文详细探讨了C/C++中函数参数的值传递、指针传递和引用传递的区别,通过实例分析了各种传递方式如何影响变量的值和地址。通过对比change0、change1、change2、change3、change4五个函数的执行效果,阐述了哪些函数能实现交换目的,哪些不能,并解释了原因。
摘要由CSDN通过智能技术生成

   因为一直对这几种函数参数的传递方式理解的不是很透彻,花了一段时间仔细捋清了他们之间的区别。这个问题也是编程初级阶段会经常遇到的问题,也是有可能在面试中遇到的基本问题,在此进行了简单的总结一下,一是加深自己的理解,二是希望帮助遇到同样问题的同学,希望能帮你们快速透彻的理解他们。

    主要以实现交换两个整形值(老生常谈的话题了)为载体进行透彻的说明,我们的主要方法就是利用最基本的输入输出功能来看函数执行前和执行后,参数地址和值的变化来看函数“做了什么事情”。

    针对每一个不同的函数,主要从展现了如下几个方面:(1)函数开始执行前的参数的状态,包括参数的地址和值(2)函数实现了什么样的操作(3)函数执行后的参数的状态。最后我们简单的总结了这5个函数为什么有的能实现目的;而有的不能实现目的,进一步解释了这些不能实现目的函数他们到底做了哪些事情(通过前后参数状态的变化来反映)。

    在main函数中,我们首先显示出实参的地址,当将实参传入到函数中,我们显示被调函数中变量的地址。只要被调函数中变量地址和实参的地址一样,我们认为是直接操作变量而不是操作变量的”副本“;如果被调函数中变量的地址与实参地址不同,则认为是对实参进行了一次拷贝,即新建了一个实参的”副本“,这个”副本“的和实参值一样,被调函数在后续的操作中都是对这个”副本“进行操作的,而副本的改变和原实参无任何关系。当被调函数结束后,该副本做为局部变量而结束生命周期。

首先看一下5个常见交换值的函数(有的能实现,有的不能实现交换目的)。依据上述原理,如果交换函数中是对真正实参(数据或指针)的操作,则认为能实现交换目的;而如果只是对实参副本进行交换操作,则认为不能达到交换目的。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值