1.引用的基本语法
引用的概念:给已存在变量取了一个别名
引用的语法:类型数据 &别名 = 原名
注意点:1.引用不是赋值,例如(int &b = a;这是引用。int b = a;这是赋值)
2.引用的变量和已存在变量共用同一块内存空间,
#include<iostream>
using namespace std;
int main()
{
//引用基本数据类型
//数据类型 &别名 = 原名
int a = 10;
int& b = a;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
b = 1000;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
system("pause");
return 0;
}
结果如下
2.引用的注意事项
引用在 定义时必须初始化
int a = 10;
int &b;//错误,未初始化
int &b = a;//正确,使用引用时必须指定变量(初始化)
一个变量可以有多个引用
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int& b = a;
int& c = a;
int& d = a;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
cout << "d=" << b << endl;
system("pause");
return 0;
}
结果如下:
引用一旦引用一个实体,再不能引用其他实体
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int c = 20;
int& b = a;
/*编译器报错*/
int& b = c;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << b << endl;
system("pause");
return 0;
}
3.引用的应用场景
3.1引用做函数参数
#include<iostream>
using namespace std;
//值传递,形参不会修饰实参
void swap01(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "swap01 a=" << a << endl;
cout << "swap02 b=" << b << endl;
}
int main()
{
int a = 10;
int b = 20;
swap01(a, b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
system("pause");
return 0;
}
结果如下:
#include<iostream>
using namespace std;
//地址传递,形参会修饰实参
void swap02(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
cout << "swap02 a=" << *a << endl;
cout << "swap02 b=" << *b << endl;
}
int main()
{
int a = 10;
int b = 20;
swap02(&a, &b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
system("pause");
return 0;
}
结果如下:
3.2引用做函数返回值
3.2.1返回局部变量引用
#include<iostream>
using namespace std;
//引用做函数的返回值
//1、不要返回局部变量的引用
int& test01()
{
int a = 10;// 局部变量存放在四区中的 栈区
return a;
}
int main()
{
int& b = test01();
cout << "b=" << b << endl;//a的内存已经释放
system("pause");
return 0;
}
这段代码,主函数中用b返回局部变量a,由于局部变量在栈区,主函数返回时a的内存已经释放,执行后b内存随便分配,出现错误。
再次提醒栈区中不要返回局部变量!!
3.2.2返回静态变量
#include<iostream>
using namespace std;
//引用做函数的返回值
//1、不要返回局部变量的引用
int& test01()
{
static int a = 10;// 静态变量,存放在全局区,全局区的数据在程序结束后释放
return a;
}
int main()
{
int& b = test01();
cout << "b=" << b << endl;
test01() = 100;
cout << "b=" << b << endl;
cout << "b=" << b << endl;
system("pause");
return 0;
}
如果函数的返回值是引用,这个函数调用就可以作为左值。
1.第一次编写时间3月15日
//不积小流,无以成江海。不积跬步,无以至千里。//