函数的参数类型 指针和指针的引用的区别

其实归根结底就是传值传引用的区别,只不过涉及到指针,理解起来可能稍微复杂一点,大家可以先去看看传值和传引用方面的博文。

首先看一个简单的函数

在两个断点处,p1的值分别为

 

 

然后自己随手写一个函数fun1,在主函数里调用它

 

我们原本期望的是:通过fun1函数申请一份存放int的内存,然后让传进fun1函数的指针指向刚刚申请的内存。

可是最终在两个断点处的结果却是这样的:

在执行fun1函数后,p1的值依旧为空,也就是说我们的期望没有成功。

要想实现我们的原本期望,可以分为两步

第一步:new 一个内存

第二步:让指针指向我们刚刚 new出来的内存。

实际上,fun1函数确实 new 了一个内存,但是却没有做到让我们传进去的指针指向 new 出来的内存,所以 p1指针的值才没有改变(p1的值即为p1所指向的内存的地址)。

这是为什么呢?

这里就涉及到形参和实参传值和传引用的概念了:

简而言之,当我们函数的参数类型不是引用时,当我们将实参(上面主函数的p1)传进去函数时,函数的形参(fun1函数中的p)的值是通过对实参的复制得到的,即此时形参的值和实参的值是相同的,都为空,但是他们两个是不同的东西

仅仅指向同一块内存而已,除此之外,没有任何联系。

然后,执行fun1函数体中的new语句,此时的效果是让形参p指向了new出来的内存和你实参(p1)没有半毛钱关系,p1原本是啥现在还是啥。

我们可以在fun1函数里打一个断点进行验证一下:

刚开始时:p1和p的值相同。

可以看到形参p的值确实改变了。

 

然后再谈谈传引用:当函数的参数为引用类型时,当实参传进函数时,形参不再是仅仅进行一个简单的复制形参直接成了实参的别名也就是说此时形参和实参就是一个东西,你对形参的操作,都会实时的反映到实参身上。我们可以写一个fun2函数,将函数参数类型设置为引用类型,就能达到想到的效果了,如图:

 

ps:上面的代码我都仅仅new了一下,但是没有delete这种管杀不管埋的行为,大家千万不要模仿!

 

转载于:https://www.cnblogs.com/XiaoXiaoShuai-/p/10958583.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值