什么是引用、什么是指针、区别是什么?

引用最初的定义:引用是一种特殊类型的变量,可以认为是另一个变量的别名,通过引用名与通过被引用的变量名访问效果是一样的。

C++对指针进行简单封装引入了引用。

程序运行时,变量只能依靠地址来区别,只有通过存储被引用变量的地址,在运行时才能准确的定位引用的变量,引用本身占用的内存空间中,存储的就是被引用变量的地址。

c++在继承C语言指针的同时引入引用。指针存储的是地址,所以指针是一种底层机制。引用则是一种高层的机制,在语言概念上他是零一变量的“别名”,把地址这一概念隐藏起来,但是在引用运行的实现机制中,还是借用于地址,差异主要是语言上的形式,最后都是靠存储地址来实现的。

引用与指针的一个显著的差别,普通指针可以多次被赋值,也就是说 可以多次更改他所指向的对象,而引用只能在初始化时指定为引用的对象,其后是不可被更改的。

指针常量和引用比较
操作T类型的指针常量对T类型的引用
定义并用v初始化(v是T类型变量)T * const p=&v;T & r=v;
取v的值*pr
访问成员mp->mr.m
读取v的地址p&r

引用本身(而非被引用对象)的地址是不可以获取的,引用一经定义后,对它的全部行为,全是针对被引用对象的,而引用本身所占用的空间则被完全隐藏起来了。

对于数据参数传递,减少大对象的参数传递开销的用途来说,引用可以更好的替代指针,使用引用比使用指针更加简洁、安全。

  1. 使用指针实现变量值的交换。
void swap(int *const pa,int *const pb){
    int temp=* pa;
    *pa = *pb;
    *pb = temp;
}

int main(){
    int a,b;
    ...
    swap(&a,&b);
    ...
    return 0;
}
  1. 使用引用实现变量值的交换。
void swap(int &ra,int &rb){
    int temp=ra;
    ra = rb;
    rb = temp;
}

int main(){
    int a,b;
    ...
    swap(a,b);
    ...
    return 0;
}

引用无法替代指针的情况。

  • 如果一个指针所指向的对象,需要用分支语句加以确定,或者中途要改变它所指向的对象,那么它初始化之后需要被赋值,而引用只能在初始化时指定被引用的对象,所以不能胜任。
  • 有时一个指针的值可能时空指针,例如当把指针作为函数的参数类型或者返回类型时,有时会用空指针表达特定的含义,而没有空引用之说,所以引用在这里不可以胜任。
  • 使用函数指针,由于没有函数的引用,所以函数指针无法被引用替代。
  • 用new动态创建的对象或者数组,需要用指针来存储它的地址。
  • 以数组形式传递大批量的数据时,需要用指针类型接收参数。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值