学习目标:
1.引用的定义
2.引用作函数参数
3.引用做函数的返回值
4.引用的本质
学习内容:
1. 引用的定义
引用的作用就是给变量起别名,具体语法为:
数据类型 &别名 = 原名;
注意:(1)引用必须初始化,比如
int a = 18;
int &b = a;//只能传入a的名称,不能传入a的值18
注意:(2)引用在初始化之后不能更改,比如
int a = 18;
int b = 28;
int &c = a;
int &c = b;//同一个别名不能多次使用,否则报错!
无论是别名还是原名,二者都属于同一内存,只要操作其一就会改变另一个的值
2. 引用作函数形参
作用:引用作函数的形参,可以修饰实参。
优点:可以简化指针
引用传递和地址传递都可以通过形参来修饰实参!!!
#include<iostream>
using namespace std;
void swap1(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
cout << "a = " << *a << "\t";
cout << "b = " << *b << "\t" << endl;;
}
void swap2(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
cout << "a = " << a << "\t";
cout << "b = " << b << "\t" << endl;
}
int main()
{
int a = 18;
int b = 20;
cout << "a = " << a << "\t";
cout << "b = " << b << "\t" << endl;
swap1(&a, &b);//调用指针
swap2(a, b);//引用
system("pause");
return 0;
}
3. 引用做函数的返回值
3.1 不能返回局部变量的引用;
#include<iostream>
using namespace std;
int& test()
{
int a = 18;
return a;
}
int main()
{
int &ref = test();
cout << "a = " << ref << endl;
cout << "a = " << ref << endl;
system("pause");
return 0;
}
总结:不能返回局部变量的地址和引用。这是因为局部变量在栈区,函数执行完后会自动释放!!!!!!!!当返回静态变量时,可以返回其引用。这是因为静态变量在全局区,其上的数据在程序结束后由系统释放!!!!!
局部变量在栈区:函数执行完毕!!
静态变量在全局区:整个程序结束后系统释放!!!
当返回静态变量时,可以返回其引用;
#include<iostream>
using namespace std;
int& example()
{
static int a = 18;
return a;
}
int main()
{
int &ref = example();
cout << "a = " << ref << endl;
cout << "a = " << ref << endl;
system("pause");
return 0;
}
3.2 函数的调用可以作为左值
#include<iostream>
using namespace std;
int& example()
{
static int a = 18;
return a;
}
int main()
{
int &ref = example();
cout << "a = " << ref << endl;
cout << "a = " << ref << endl;
example() = 100;
cout << "a = " << ref << endl;
cout << "a = " << ref << endl;
system("pause");
return 0;
}
4. 引用的本质(选学)
引用的本质是:一个指针常量。主要是用来修饰实参,防止误操作。在函数形参列表中,可以加上const来现指实参改变。