指针和引用的区别及其使用意义

1、指针和引用的区别

     (1)指针是一个实体,他在栈中有自己使用的空间,但是引用没有,引用仅是个别名;

     (2)引用必须初始化,指针不用,但是最好初始化;

     (3)引用只能在定义时被初始化一次,之后不可变;指针可变;

     (4)引用没有const,指针有const,const的指针不可变;

     (5)指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增;

     (6)“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;

     (7)引用是类型安全的,而指针不是 (引用比指针多了类型检查)

     (8)它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元,不能建立数组的引用

2、引用意义用法(指针就不赘述了)

        int a = 2;

        int  &b = a;(这就是C语言规定“引用”的方式,变量b引用了变量a)

        结果如下:

        (1)引用变量b的值 = 变量a的值 = 2;

        (2)引用变量b没有分配内存空间;

        (3)引用变量b地址&b = 变量a的地址&a;

        (4)int &b,本身不是一种数据类型,0字节,它只是一个别名

        (5)int b是定义的一种数据类型,有内存空间4字节

3、引用作形参

          int  &b = a;

          void  func(int  &b)

          (1)使用时和指针一样,func(b);  b被定义成引用变量b,形参要求一个引用变量,所有填入b即可

4、实际应用(这篇博客非常经典,是我在学习创建二叉树时查到,因为里面出现了int*& variable,开始不是很理解)

https://blog.csdn.net/luoweifu/article/details/39119487 

但是c语言并不支持引用,比如int &a = b;但是不能识别&。看了这篇博客后,更深刻的理解了函数传参时传入的一个指针,这个指针必须要在功能函数体外部初始化过,并指向了一个实体,这样在函数内部进行赋值,值才能带出来,如果传入一个指向空或者没有初始化的指针,并在函数体内部定义变量,对变量进行赋值,再将该变量地址传给该指针,但是指针指向的的局部变量出函数体后会释放,有一个种解决方法,就是通过函数返回值返回,这样就是将局部变量通过函数返回出来,在赋值给我们外部定义的变量,这样就增加了一次赋值,使代码效率变低,在C++中,有引用变量一说,引用是必须初始化的,传参传入引用变量就避免了这个问题,防止最后我们得到的指针指向的值出现不可识别的值,因为我们写代码时会忘记给一个指针初始化,最后结果不对,不知道哪里出现了问题。

5、C++中的引用

void main()
{
    int a = 10;  //变量引用,b只是a的一个别名,操作b等于操作a;
    int &b = a;

    int *p = &a;  
    int *&q = p;  //对指针的引用,操作q等于操作p,指针q,p本身具有相同地址空间,空间里的值存放着所指向变量的地址

    int ar[10] = {0,1,2,3,4,5,6,7,8,9};    
    int (&br)[10] = ar;  //对数组的引用,br引用一个具有10个元素的数组类型

    const int x = 100;  
    const int &y = x;   //如果x为const,其引用也必须是const,因为x已经不可改变,其引用不加const表示可以通过引用变量y改变x的值

    int n = 20;
    const int &m = n;  //n可以改变,其引用m可以定义const,只要不通过m去改变n的值即可

    const double d = 12.34;
    const int &f = d;  //首先编译器会分配一个临时空间,将double d的整数部分取出,放在临时空间,引用变量f指向该临时空间,而不是d空间
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值