为了账号安全,请及时绑定邮箱和手机立即绑定

函数的形参一定要是引用么?

函数的形参一定要是引用么?fun(int &x,int &y)难道不能写成fun(int x,int y)?引用的好处是什么,小萝卜头和罗XX为什么用小萝卜头就好,用罗XX就不好?

正在回答

3 回答

其实啊,对于函数参数的传递(也就是实参与形参的结合),在C语言中,一般是两种,一种按值传递,一种是按指针传递,按值传递我们熟悉,创建形参,将实参的值赋给他,然后形参参与到函数运算,但是对于一些需要函数(比如交换函数)改变传入的实参的时候(我理解的实参是这样的,对于按值和按指针,实参就是该变量的值,而形参就是接受该值得变量),按值传递不能起作用了,因为他不是操作原数据而是他的副本,这时候指针就起作用了,传入的是地址的拷贝,但是我们依然可以通过拷贝处理原数据,所以可以完成任务,这时候我们就发现,按值传递传入的数据的拷贝,如果是大型结构体,拷贝起来费空间费时间,远不如一个指针来的容易,这就是有点。再回到C++,他引入了引用的概念,也就出现了按引用传递的概念,但是引用本质就是指针,从前的C++编译器遇见引用就是先将其处理为指针再完成编译,引用是变量a别名,p是指向该变量(比如a)指针,那么*p是不是可以看做a的别名呢,想想,*p其实就是a,那么*p算算是a的引用呢,当然!这就是引用的本质,引用只不过是指针的简化而已!以后的类也是用引用,几乎不用指针,不是不行,而是写着麻烦,看着难受而已!记住本质

0 回复 有任何疑惑可以回复我~
#1

小程序魔王

你扯远了,哪儿有那么复杂,c语言参数的传递只有一种,就是传值,值的类型可能是各种类型,比如整型,指针类型,引用类型
2019-04-22 回复 有任何疑惑可以回复我~

我是这样理解的,

如果是void fun(int x,int y)其实是找了一个跟罗xx同名的人,但本质上不是罗某某,所以形参的罗xx无论做什么事情都不会影响实参罗xx

但是void fun(int &x,int &y)是给了实参罗某某取了别名,叫萝卜头,你叫萝卜头做什么事情,实质上是去叫罗某某做的,所以形参用的是引用的话,形参的数值的改变肯定会影响到实参的值

4 回复 有任何疑惑可以回复我~

这个主要是形参与实参的关系 。
在函数的参数列表里的,是形参,它是对实参的一个拷贝, 但是它们不是在内在同一个块。所以对形参的改变不会影响实参的值 。
c++可以通过引用,也就是别名来改变, 比如把函数定义成 void fun(int x,int &y)
这样在函数里,对第二个参数做改变,相应的实参也会改变,因为它们是同一个。 这就是引用类型的作用。

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之离港篇
  • 参与学习       122700    人
  • 解答问题       474    个

C++扫清通往面向对象的最后一道障碍,将所有知识点融会贯通

进入课程

函数的形参一定要是引用么?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信