知识点复习 (16)—— 引用

1.1 引用的基本使用

作用:

  • 给变量起别名
  • 引用变量的主要用途是用作函数的形参

语法:

  • 数据类型  &别名 = 原名

解释:

  • 引用只是对指针进行了简单的封装,它的底层依然是通过指针实现的,引用占用的内存和指针占用的内存长度一样,在 32 位环境下是 4 个字节,在 64 位环境下是 8 个字节,之所以不能获取引用的地址,是因为编译器进行了内部转换:
int a = 99;
int &r = a;
r = 18;
cout<<&r<<endl;

编译时会被转换成如下的形式:
int a = 99;
int *r = &a;
*r = 18;
cout<<r<<endl;

 eg:

#include <iostream>

using namespace std;

int main()
{
cout << "引用练习:" << endl;
//引用语法
//数据类型 &别名 = 原名 ;
//1.定义一个变量
int a = 10;
//2.创建引用,给变量起别名
int &b = a;
//先输出看一下结果
cout << "a = " << a << endl;
cout << "b =" << b << endl;
//3.操作别名
b = 21;

//4.输出测试
cout << "a = " <<a<< endl;
cout << "b =" << b << endl;
system("pause");
return 0;
}

 

1.2、引用的注意事项

  • 引用必须初始化
  • 引用在初始化后,不可以再改变

eg:

#include <iostream>
using namespace std;
int main()
{
cout << "引用的注意事项:" << endl << endl;
//1.创建引用时必须初始化
//int &b;//必须初始化
int a = 10;
int &b = a;

//2.引用初始化之后不能再指向其它变量
int c = 90;
//&b = c; //不可以再只想其他的变量
system("pause");
return 0;
}

 

1.3、引用做函数参数

作用:

  • 函数传参时,可以利用引用的技术让形参修饰实参

优点:

  • 可以简化指针修改实参

eg:

#include <iostream>
using namespace std;
//声明交换两个数的值 函数
void swap(int &a, int &b);

int main()
{
cout << "引用做函数参数:" << endl << endl;
//1.定义两个变量
int a = 8;
int c = 111;
cout << "交换前:" << endl;
cout << "a = " << a << endl;
cout << "c = " << c << endl << endl;
cout << "交换后:" << endl;
swap(a, c);
cout << "a = " << a << endl;
cout << "c = " << c << endl << endl;
system("pause");
return 0;
}

void swap(int &a, int &b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}

 

1.4、引用做函数的返回值

作用:

  • 引用是可以作为函数的返回值存在的

注意:

  • 不要返回局部变量引用

用法:

  • 函数调用作为左值

 

eg:

#include <iostream>
using namespace std;

//引用做函数的返回值
//1.不要返回局部变量的引用
int& test01()
{
//局部变量存放在栈区,函数调用完之后就被系统给销毁了
int a = 10;
return a;
}
//2.函数的调用可以作为左值
int&test02() {
//存放在全局区,程序结束后,才会被销毁释放
static int a = 8;
return a;
}
//返回一个地址
int* test03()
{
static int a = 9;
return &a;
}
int main()
{
cout << "引用做函数的返回值:" << endl << endl;
int &ref = test01();
cout << "ref =" << ref << endl; //系统保留一次
//cout << "ref =" << ref << endl;//再次调用已经被释放

int d = 0;
int &q = d;
int &e = q;
cout << "d =" << d << endl;
cout << "q =" << q << endl;
cout << "e =" << e << endl;

int &rref = test02();
cout << "rref =" << rref << endl;
cout << "rref =" << rref << endl;//再次调用也是可以的

//如果函数做左值,那么必须返回引用
test02() = 15;
cout << test02()<<endl;
int *rrref = test03();
cout << "rrref=" << *rrref<<endl;
cout << "rrref=" << *rrref << endl;
*test03() = 12;
cout << *test03()<< endl;
system("pause");
return 0;
}

 

1.5、引用的本质

本质:

  • 引用的本质在c++内部其实是个一个指针常量

 

eg:

 

#include <iostream>
using namespace std;
int main()
{
cout << "引用的本质:" << endl << endl;
//引用的本质是指针操作
int a = 10;
int &b = a;

 

//可以写成
// int* const b = &a;

 


system("pause");
return 0;
}

 

总结:

c++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了

 

1.6、常量引用

作用:

  • 常量引用主要用来修饰形参,防止误操作

 eg:

#include <iostream>
using namespace std;
//coust修饰函数参数
void prt(const int& a)
{
//不可以再修改参数的值
//a = 10;
cout << "a =" << a << endl;
}
int main()
{
cout << "const修饰引用:" << endl << endl;
//引用本身需要一个合法的内存空间
//因此这么做不对
//int &a = 89;
//加入const就可以了,编译器会优化代码
const int& ref = 10;
//const修饰后不能再修改值
//ref = 0;
int t = 9;
prt(20);
prt(t);
system("pause");
return 0;
}

posted @ 2022-04-16 12:04  雾枫  阅读(136)  评论(0编辑  收藏  举报