![]()
- 总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单
点击查看代码
#include<iostream>
#include<string>
using namespace std;
//交换函数
//1、值传递 (形参不会修饰实参)
void mySwap01(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
cout << "mySwap01 a = " << a << endl;
cout << "mySwap01 b = " << b << endl;
}
//2、地址传递 (形参会修饰实参)
void mySwap02(int* p, int* q)
{
int tmp = *p;
*p = *q;
*q = tmp;
cout << "mySwap02 p = " << *p << endl;
cout << "mySwap02 q = " << *q << endl;
}
//3、引用传递 (形参会修饰实参)
void mySwap03(int &m, int &n)
{
int tmp = m;
m = n;
n = tmp;
cout << "mySwap03 m = " << m << endl;
cout << "mySwap03 n = " << n << endl;
}
int main()
{
int a = 10;
int b = 20;
mySwap01(a, b); //值传递,形参不会修饰实参
cout << "a = " << a << endl;
cout << "b = " << b << endl;
int p = 30;
int q = 40;
mySwap02(&p, &q); //地址传递,形参会修饰实参
cout << "p = " << p << endl;
cout << "q = " << q << endl;
int m = 50;
int n = 60;
mySwap03(m, n); //引用传递,形参会修饰实参
cout << "m = " << m << endl;
cout << "n = " << n << endl;
system("pause");
return 0;
}
![]()
点击查看代码
#include<iostream>
#include<string>
using namespace std;
//引用做函数的返回值
//1、不要返回局部变量的引用
int& test01()
{
int a = 10; //局部变量放在四区的 栈区中
return a;
}
//2、函数的调用可以作为左值
//如果函数的返回值是引用,这个函数调用可以作为左值
int& test02()
{
static int b = 20; // 静态变量,存放在全局区,全局区上的数据在 程序结束后 系统释放
return b;
}
int main(){
int &ref = test01();
cout << "ref = " << ref << endl; //10 第一次结果正确,是因为编译器做了保留
cout << "ref = " << ref << endl; //1665461568 第二次结果错误,因为a的内存已经释放
int &ref2 = test02();
cout << "ref2 = " << ref2 << endl;//20
cout << "ref2 = " << ref2 << endl;//20
//函数的调用可以作为左值
test02() = 1000; //test02返回b的引用,即 b = 1000;
//ref2 就是b的别名
cout << "ref2 = " << ref2 << endl;//1000
cout << "ref2 = " << ref2 << endl;//1000
system("pause");
return 0;
}