C++讲解——值传递与引用传递
哈罗哈 大家学到了这一块的知识点了 我最近保持了高更很开心。
在学这个知识点之前,我们先回顾一下上两篇函数中的实参与形参。
为什么要使用引用传递?
一般来说,函数是通过return来输出自己计算出来的值的,当没有return的时候,也就是这种函数:
# include<iostream>
using namespace std;
void fuction(int x){
//函数体
}
int main(){
int a
fuction(a)
cout << "请输出x"<< x
cout << "请输出a"<< a
}
那么这个形参x其实是没有办法改变实参a的。因为在这里传递值的口子只有单向的,就是实参传递给形参,而不是形参传递给实参。
如果我们想替换的话,就会可以用这个符号&进行引用:
#include <iostream>
using namespace std;
void modifyReference(int &x) {
x = 100; // 修改的是原始变量
}
int main() {
int a = 10;
modifyReference(a);
cout << a << endl; // 输出 100,原始变量被修改
return 0;
}
这样形参x就可以改变实参a了。
这是一个超级简单的启动教程,你可以自己试试看,感受一下代码的运行。
引用传递的原理
在上面的代码,在类型名后面添加 & 进行声明的变量 x 为引用对象。
引用对象不可以自己建造房子,它会在别人的房子上贴上自己的名称,这里的“房子”就指对象。上面的代码中,我们要调用modifyReference时候,就是让a成为了x的别名了。
值传递和引用传递的区别
这两种情况下的函数最大的不同点如下。值传递:不可以覆盖实参的值。引用传递:可以覆盖实参的值。 所以在实际使用中,我们要谨慎使用引用传递,在需要改变实参值的时候再使用。
值传递的应用
这里有一个代码示例,就是实现将变量a,b,c从小到大重新赋值的功能。
#include <iostream>
using namespace std;
//--- 交换参数 x 和 y 的值 ---//
void swap(int& x, int& y)
{
int t = x;
x = y;
y = t;
}
//--- 按升序排列参数 a、b、c ---//
void sort(int& a, int& b, int& c)
{
if (a > b) swap(a, b); // 1
if (b > c) swap(b, c); // 2
if (a > b) swap(a, b); // 3
}
int main()
{
int a, b, c;
cout << "变量a:"; cin >> a;
cout << "变量b:"; cin >> b;
cout << "变量c:"; cin >> c;
sort(a, b, c); // 按升序排列 a、b、c
cout << "按升序重新排列变量a、b、c。\n";
cout << "变量a的值为 " << a << "\n";
cout << "变量b的值为 " << b << "\n";
cout << "变量c的值为 " << c << "\n";
}