您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页C++:引用详解

C++:引用详解

来源:华佗小知识

引用

就是别名。比如有个同学叫张磊,给他取个外号叫张三石,这就是别名。

如何定义引用

类型 &引用变量名称=变量名称

&符

引用的语法规则:

给a,b开辟空间,不给c开辟空间 。

所谓的引用,就是对已有的一个变量起了一个别名

引用的特点

1.不能定义所谓的空引用,

2.定义引用时必须给与初始化。

3.引用没有二级引用,引用不分等级,没有引用的引用。

引用的用处:

交换:

无引用时:使用指针交换两个整型值

 有引用:引用作为形参代替指针

 引用时,没有空引用所以不需要判断,比指针安全,在调动函数时必须对行参的引用初始化。

引用和const关系

const加在引用的左边,const修饰的是引用本身,c是a的别名,不能通过c去改变a;下面的const修饰的是引用本身,系统将会把const忽略掉

 常变量必须用常引用,普通变量可以用普通引用引用(可读可改),也可以用常引用引用(只可读不可改)

 

常引用可以引用普通变量,可以引用常变量,可以引用字面变量 

 其他的引用形式:

引用可以引用变量,引用数组,引用指针

第一个引用是引用数组里的某个元素,cr引用是整个数组。br引用是错误的,是因为开辟20个空间,每个空间的类型是整型类型的引用,但引用没有空间,一个开空间一个不要空间,矛盾。没有定义数组,数组里是引用的概念。

指针的别名 

 

 引用和指针的区别

语法规则上

2.程序为指针变量分配内存区域;而不为引用分配内存区域。

3.解引用是指针使用时要在前加“*”;引用可以直接使用;

5.指针变量的值可以为空(NULL,nullptr);没有空引用。

6.指针变量作为形参时需要测试它的合法性(判空NULL);引用不需要判空;

7.对指针变量使用“sizeof”得到的是指针变量的大小,对引用变量使用“sizeof”得到的是变量的大小。

对于x86系统来说,运行结果如下:

8.理论上指针的级数没有;但引用只有一级。即不存在引用的引用,但可以有指针的指针。

9.++引用与++指针的效果不一样。

引用和指针的相同点不可以对函数中的局部变量或对象以引用或指针返回

什么情况下能以指针或以引用的形式返回变量的生存期不受函数的影响。也就是说,当函数调用结束后,变量仍然活着。可以加个静态,成为静态变量,可以使变量活着。返回全局变量的引用或者返回全局变量也可以,或者以引用进也可以以引用出。

汇编层面(机器代码)

 底层汇编处:

从底层上将,引用就是指针,是一个自身为常性的指针。

如何使用引用 

内置类型

int Add_Int(int x,int y)   //从内存中取数据,只需访问一次内存,
{
    return x+y;
}
int Add_Int_a(int& x,int& y)  //引用时,传进去实际上一个地址,因为底层引用是一个指针。在这里访问内存要访问两次,指针对他解引用
{
    return x+y;
}
int Add_Int_b(const int& x,const int& y)//情况和上面一样
{
    return x+y;
}
int main()
{
    int a=10,b=20;
    int c=0;
    c=Add_Int(a,b);
    cout<<c<<endl;
    return 0;
}

 对于内置类型来说,最好使用值传递方式,不需要进行引用。内置类型,如果希望形参要改变实参的值,就给出一个引用;如果形参不去改变实参的值,就传值不要穿引用。

自定义类型:

 

funa

funb

能够用引用就不要用指针 ,对于内置类型最好是传值,如果要求形参改变实参,就定义成引用

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务