1. 引用的概念及用法
2. 引用做参数
3. 引用做返回值
4. 汇编层看引用的特性
5. 引用和指针的区别和联系:
1. 引用的概念及用法
概念: 引用就是某一变量 (目标) 的一个别名, 对引用的操作与对变量直接操作完全一样
温馨提示:
引用不是定义一个新的变量
定义的格式为:
类型 & 引用变量名 = 已定义过的变量名;
用法:
举个例子:
- int a = 5;
- int& b = a;
这就是引用, b 引用 a,b 是 a 的别名
2. 引用做参数
我们在 C 语言中经常用指针做参数:
- Func(int *a) ;
- int main()
- {
- int arr[1000];
- Func(arr);
- }
像这种情况我们会用指针作为参数, 增加程序运行效率当然指针由于太灵活, 会导致不安全在里面, 故此 C++* 引入了引用类型, 他的效果和指针一样其实引用底层就是指针, 下面会介绍
引用作为参数:
- Func(int& a) ;
- int main()
- {
- int arr[1000];
- Func(arr);
- }
引用作为参数很好的规避了指针的风险, 同时能达到指针的效果
当不希望函数内改变参数 x 的值时, 尽量使用常引用传参.
- void ReadBigData (const bigData& x)// 此时不需要在函数内部改变参数的值我们赋予参数常属性
- {
- int a = x. array[100];
- }
3. 引用做返回值
以引用返回函数值, 定义函数时需要在函数名前加 &
- int ret = 0;// 全局变量
- int Add1(int a, int b)
- {
- ret = a + b;
- return ret;
- }
- int& Add2(int a, int b)// 引用做返回值
- {
- ret = a + b;
- return ret;
- }
- int main( )
- {
- printf("%d\n", Add1(5,6));
- printf("%d\n", Add2(4,5));
- return 0;
- }
引用做返回值优点:
用引用返回一个函数值的最大好处是, 在内存中不产生被返回值的副本
4. 汇编层看引用的特性
结论:
不要返回一个临时变量的引用
如果返回对象出了当前函数的作用域依旧存在, 则最好使用引用返回, 因为这样更高效
5. 引用和指针的区别和联系:
不同点:
指针是一个实体, 而引用仅是个别名;
引用使用时无需解引用(*), 指针需要解引用;
引用只能在定义时被初始化一次, 之后不可变; 指针可变;
引用没有 const, 指针有 const;const 修饰的指针不可变;
引用不能为空, 指针可以为空;
sizeof 引用得到的是所指向的变量 (对象) 的大小, 而 sizeof 指针得到的是指针本身 (所指向的变量或对象的地址) 的大小;
指针和引用的自增 (++) 运算意义不一样;
8. 从内存分配上看: 程序为指针变量分配内存区域, 而引用不需要分配内存区域
相同点: 两者都是地址的概念, 指针指向一块儿内存, 其内容为所指内存的地址; 引用是某块儿内存的别名
来源: https://blog.csdn.net/qq_38646470/article/details/79681871