找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

C++中的传参方式

admin 2020-2-27 05:23 136人围观 C++相关

今天跟大家讲解一下C++中最常见一个知识点--传参。学习这个知识点的前提是需要对指针、内存管理有一定的了解。
一、前言
什么是传参?传参就是我们在调用函数的时候很多时候需要把变量通过参数的方式传到函数里去做处理,得到结果之后有些可能还需要传出来,方便外部的使用,并且让代码可读性更强。

二、C++传参的三种方式

这三种方式分别为:值传递、指针传递、引用传递。接下来会分别来介绍着三种方式并对他们做比对。
1、基本形式:

  • 值传递       void func(int a,intb)

  • 指针传递   void func(int *a,int *b)

  • 引用传递   void func(int &a,int &b)

2、实例

知道了三种传递方式的基本形式,我们通过一个小实例来看一下这三者的不同之处,一起用C++实现一个题目:写一个函数,用来交换a和b的值。

1)值传递形式



2)指针传递形式



3)引用传递形式



其结果分别为







3、分析

从上面的例子可以看出,指针传递和引用传递成功的将a、b的值做了互换,而值传递并没有将a、b互换,这是为什么呢?1)值传递没有成功的原因是因为在main函数调用swap1的时候将实参的值付给了形参,此时形参相当于复制了一份,如果你打印此时实参和形参的地址,你会发现实参和形参的地址是不同的,也就是说你在swap1函数里面对形参做了互换其实对实参是没有任何改变的,可以用下图来理解。



2)指针传递能成功的原因在于:通过swap(&a,&b)将实参a和b的地址传进去了,它的本质也是值传递,只不过它传的是地址,然后在通过*运算拿到地址的内容,此时,实参和形参在内存上的地址是一样的,改变了形参,也就对应改变了其地址上的内容,而实参也是指向这块内存的,所以也就实现了a和b的互换。



3)引用传递能成功的原因在于引用本身就是就是外部变量的别名,这就是引用的定义,引用的定义就是某个已存在变量的另一个名字。所以对于引用的操作其实就是对于外部变量的操作,当然能够实现a和b的互换。
4、总结

从上面的例子可以看出,三种方式都有着各自的特点。1)当我们不能在函数中对原有值做修改的时候采用值传递,因为值传递的本质是复制,所以他不会改变原有的值,这样就保护了原来的数据不会被修改。
2)在我们需要对原有值做改变的时候就可以使用指针传递和引用传递了,一般情况下我推荐使用引用传递,两个原因:1、指针的运用涉及到很多内存方面的问题,需要加很多校验,防止空指针问题,如果对指针理解不深的话很有可能会出很多问题。2、引用是类型安全的,引用过程会进行类型检查;指针不会进行安全检查。不知道大家对于C++的三种传参方式理解了吗?有任何问题都可以私信我哦

----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:跟丁老师学编程,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......