在这里插入代码片:
#include<iostream>
using namespace std;
// 引用 : 给变量起别名
//语法 : 数据类型 &别名 = 原名
int main()
{
int a = 20;
int &b = a;
b = 30;
cout << a << endl;
cout << b << endl;
const int c = 20;
const int &d = c; //需要相同的const 修饰
cout << c << endl;
cout << d << endl;
//1.引用必须要初始化
//int &b; 错误的
//2.引用一旦初始化,就不可以修改
// int &k;错
int i = 60;
int &k = i;
cout << k << endl;
int j = 60;
// int &k = j;错误
cout << k << endl;
}
2.函数与引用:
在这里插入代码片:
#include<iostream>
using namespace std;
void swap1(int a,int b) //值传递,形参并不会使实参的值发生改变
{
int temp = a;
a = b;
b = temp;
}
void swap2(int *a,int *b) //地址传递,形参会使实参的值发生改变(并返回原地址)
{
int temp = *a;
*a = *b;
*b = temp;
}
void swap3(int &a,int &b) //引用传递,形参会使实参的值发生改变
{
int temp = a;
a = b;
b = temp;
}
void main()
{
int a = 10;
int b = 20;
swap3(a,b);
cout << "a= " << a<< endl;
cout << "b= " << b<< endl;
}
3.引用做函数的返回值:
在这里插入代码片:
#include<iostream>
using namespace std;
//引用做函数的返回值
//1.不要返回局部变量的引用
int & test1()
{
int a = 10; //局部变量放在栈区,运行完,系统自动释放
return a;
}
int & test2()
{
static int a = 10; //静态变量,存放在全局区,全局区上的数据在结束后系统释放
return a;
}
void main()
{
int &ref = test1();
cout << "ref " << ref<< endl; //第一次结果正确,是因为编译器做出了保留
cout << "ref " <<ref<< endl; //第二次结果错误,是因为编译器已经将a的内存释放了
int &ref2 = test2();
cout << "ref2 " << ref2<< endl;
cout << "ref2 " << ref2<< endl;
test2() = 1000; //如果函数的返回值是引用,这个函数调用的可以作为左值(必须静态变量在函数中)
cout << "ref2 " << ref2<< endl;
cout << "ref2 " << ref2<< endl;
}
4.引用的本质
本质:就是一个指针常量
5.常量引用
在这里插入代码片:
#include<iostream>
using namespace std;
//常量引用
//使用场景,用来修饰形参,防止误操作
void showValue(const int &a)
{
//a = 100;加了const后不能修改
cout << a << endl;
}
void main()
{
// int a = 10;
// int &ref = 10; 引用必须引一块合法的内存空间
const int & ref = 20;
//加上const之后,编译器将代码修改 int temp =10; const int & ref = temp;
//&与*是一样的
//ref =10;加入const 之后 变为只读 ,不可以修改
int a = 10;
showValue(a);
cout << a << endl;
}