开发工具与关键技术: Visual Studio / C++
作者:何文涛
撰写时间:2019-4-25
C++有三种参数传递机制:
值传递,指针传递,引用传递
值传递:值传递是最常见的一种参数传递的方式,首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,然后把以求出的实参表达式的存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量使用这种方式,调用函数本身不对实参进行操作,也就是说,行参改变不会实参。
下面就举了个值传递的例子
例子中fun()函数采用值传递的方式,传入的实参实际上是m、n的副本而非其本身,所以对副本的改变并不会反映到m、n本身上。
输出结果为12
指针传递:
如果在函数定义时将形参说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式就是地址传递方式。
指针传递与按值传递的不同在于,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
如图例子
fun()函数体内的x是指向外部变量n的指针,改变指针的内容将导致n的值得改变,所以n的值成为了10。
指针传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。
引用传递:
如图一个很简单的例子
引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”