C++入门,到底如何理解引用?

C++入门,到底如何理解引用? 对很多从C入门到C的小伙伴来说在C的引用和指针上总是搞不清楚两者的区别看完本篇内容你就能彻底理解C为什么要引入引用这个概念以及如何运用引用如何区别引用与指针。引用的概念与定义引用不是定义一个新的变量而是给已存在的变量起一个别名引用变量和被引用变量共同使用同一块内存空间。使用格式类型 引用别名引用对象引用的特性1.引用在定义时必须初始化。int b;//err2.一个变量可以存在多个引用。int a0; int ba; int ca;//ok3.引用一旦引用一个实体再不能引用其他实体。引用的使用引用大多数的使用场景是引用传参和传引用返回其相较于使用指针的优点是减少拷贝提高效率和改变引用对象时同时改变被引用对象。用指针写一个swap函数实现交换void swap(int* x,int* y) { int temp*x; *x*y; *ytemp; } void main() { int a1; int b2; swap(a,b); }用引用写一个swap函数实现交换void swap(int x,int y) { int tempx; xy; ytemp; } void main() { int a 1; int b 2; swap(a, b); }相当于给变量a和b取了个别名x和y修改x和y就等于修改了a和b。不用像使用指针那样麻烦、晦涩。对于有参数的函数在主函数中要给该函数传参时编译器会给该函数分配一个新的内存空间用来存放参数当传的参数规模足够大时付出的代价会很大体现在1.内存消耗翻倍同时存在两份完全一样的数据。2.时间消耗大复制大量数据需要遍历内存、执行赋值。3.额外开销复制完成后原来的数据可能根本不再需要。而使用引用传参则不需要另外提供新的内存空间而是对实参直接进行操作大大提高运行效率降低运行成本。const引用引入对象的访问权限在引用过程中可以缩小但是不能放大。void mian() { const int a0; int ba;//err }const修饰一个变量相当于把变量变成了常量不允许改变而b引用a时没有添加const修饰权限被放大是不被允许的。正确示例void main() { const int a0; const int ba; }同时权限允许被缩小例如void main() { int a0; const int ba; a1;//ok b2;//err }解释这里的const int ba只是给a起了一个只读别名它限制的是通过b去修改a的行为但并不能改变a本身的类型属性。可以引用一个const对象但必须用const引用。const引用也可以引用普通对象。另外在一些使用引用的场景里引用通常引用的是一个临时对象而在C中规定临时对象具有常性在使用引用时要用const修饰避免权限放大。例如void main() { double a1.11; int ba;//ok int ca;//err const int ca;//ok }解释编译器尝试进行隐式转换double-int时会生成一个临时 int 对象。而这个临时int对象具有常性应该被const修饰。指针和引用的关系1.语法概念上引用是一个变量的取别名不开空间指针是存储一个变量的地址需要开一个指针大小的空间。2.指针容易出现野指针的问题引用则很少出现引用相对安全一些。3.引用在定义时强制进行初始化指针则不强制初始化。4.引用不可以改变指向而指针可以不断的改变指向。引用和指针在实践中是相辅相成的有些数据结构的场景中引用无法替代指针二者各有特点。以上就是引用的用法及引用与指针的区别和联系感谢观看