当前位置:   article > 正文

c++函数参数传递问题_c++中变量作为入参时变量名可以作为地址吗

c++中变量作为入参时变量名可以作为地址吗

函数是构成c++程序的基本模块,每个函数均具有相对独立的功能。而参数是函数与主题之间的一个重要联系,理解了函数参数传递就能更好的应用好函数了。

函数的参数传递分为值传递,地址传递和引用传递三种类型。

1.值传递

在值传递中形参为基本类型变量,结构体类型变量和类类型变量。实参为相应的变量,常量和表达式。

值传递是一种单向传递,即只能把实参传递给形参,对形参的操作不能改变实参的值。(下面的程序将给出解释)

最终输出结果是: 

66,88    88,66   66,88

我们可以看出在函数内部输出的数被改变了,但外部的却没改变。这里就做一个简单解释,不做累述了。

其实当代码运行到函数这部分时,实参(主函数定义的a,b)被传递给函数内的形参,此时函数内部创建了一个临时的内存空间储存实参的值,然后进行交换,最后输出,当函数结束后这个临时内存也被释放了。

所以整个过程中,主函数内部的实参一直放在原本的内存空间,函数只是相当于复制了一份然后自己进行改造,原来的值是不变的。

2.地址传递

在地址传递中形参为莫种类型的指针,实参为相应的地址(变量的地址和保存了某个地址的指针变量),所以被调用的函数中即可以操作指针也可以操作指针所指的数。

所以地址传递是可以改变实参的值

 最终输出结果是:

66,88   88,66   66,88

很显然实参的值还是没变,这是因为我们传进函数的是指针变量,也就是实参的地址,交换的也是地址,所以才不改变,但我们知道*p(p为指针变量)是引用p指向内存空间内的元素,所以要改变实参的值我们只需要在函数内用*p来表示即可。

地址传递可能会改变实参的值,这要看你怎么用了。

3.引用传递

又有一下程序

 

输出结果为:

66,88   88,66   88,66

在这里实参变了,为什么呢?其实很简单,在函数中的int &x并不是取x的地址,而是对输入的实参起一个别名,所以你进行操作的还是原来的实参。

结  论

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法研究专家/article/detail/63104
推荐阅读
相关标签
  

闽ICP备14008679号