C++中值类型形参、指针类型形参和引用形参的探讨

本文详细解析了C++中函数参数传递机制,包括值传递、引用传递和指针传递的区别,以及如何在被调函数中正确操作形参。通过实例分析,帮助读者掌握C++函数参数传递的核心概念。

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

Void func1(int a)

{

       a++;

       cout<<a;

}

 

Void func2(int *a)

{

       Int c = *a;

       Cout<<c;

}

 

Void func3(int *&a)

{

       Int *c;

       C=a //这里大家会不会想,形参接收的是int类型指针实参的引用,而不是实参的值。如果这样理解,是说不过去的,如果函数的原型定义成func3(int &a),形参变成了这样,但在函数中我们还是用操作int变量的方式去操作这个形参,而不是用一个指针变量来接住这个值,再通过*来取值,为什么可以这样,原因是编译器规定的就是这样。虽然操作的方法一样,但总有些不同吧,要不&岂不是多余的了?

       如果不带&,那么形参会将自己里面存的值复制一份存给形参,这时候无论形参怎么改变都不会影响到实参。

       如果带&,那么实参会将变量的引用传给形参,而不是将值传给形参。这个时候,形参和实参实际是上同一个东西,他们相互影响相互作用。

到这里自然,还是有人会问,既然传过来的是引用,为什么在被掉函数中不用操作引用的方式来操作形参,而还是用操作int类型变量的方式来操作形参呢?应该样解析?首先,这是编译器或者说语言对程序员的照顾吧。接着,转过来,有&和无&的目的是为了区分到底是直接操作原始数据还是要操作原始数据副本的问题。在被掉函数中可以忽视掉&,定义的时候根据需要取舍即可。

}

 

//首先自己分清指针,和指针变量,

Void main()

{

       Int a=3;    //a是一个int 类型的变量,里面的值是3。

       Func1(a);   //形参也是int类型的变量,形参会传什么过来?是a变量还是,a变量中的值?鬼都知道传的是a的值:3。

       所以,形参和实参必须是相同类型的,这样形参才能接住实参的值。实质就是将形参的值,copy一份,从一个容器(实参)放到另一个容器(形参)中。 

 

       Int *b;

       b = &a;    //实参b是一个int类型的指针变量,装的是a变量的指针。

       func2(b);   //形参当然也是int 类型的指针变量,直接将b传过来可能吗,来也装不住啊,它只能装b中的内容也就是a变量的指针。

       Func3(b);

}

转载于:https://www.cnblogs.com/Ellfelo/archive/2013/05/10/refpointer.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值