【C++】引用和指针

为什么要引入“引用”?

  • C++中指针十分不安全,使用不恰当就会使程序出错。所以提出"引用"来替代指针,提高程序的安全性。
  • 它使原来在C语言中只能使用指针来实现的功能,有了另一种实现的方式。而且在书面书写更为简洁。

引用的定义

  • 引用就是给变量起别名,他不能脱离被引用的对象而独立存在。
  • 引用的声明方法:类型标识符 &引用名=目标变量名(如:int &ptr = num;

引用和指针的相同点

  1. 他们在内存中都是占用4字节(32位系统)的内存空间。
  2. 他们存放的都是被引用对象的地址。

引用和指针的区别

  1. 网上有些说法是,引用自身不是一个变量,编译器可以不给引用分配空间。实际上引用本身也是一个变量,只是这个变量比较特殊,和指针一样存放的是被引用对象的地址,只是这个变量一旦指向后就不能改变。实际上在底层,引用是由指针按照指针常量的方式来实现的。

  2. 引用在定义的时候,必须进行初始化(不可定义一个引用指向NULL,必须指向对应的变量),并且不能够改变;指针在定义的时候不一定需要初始化,并且指向的空间可变。

  3. 指针本身允许寻址(即&p返回的是指针常量/变量本身的地址)被引用对象使用*p来表示;引用本身不允许寻址,&r返回的是被引用对象的地址,而不是引用本身的地址,被引用的对象,直接用引用本身表示。

  4. 凡是使用引用的代码,都可以转化为使用指针常量的形式;但是使用指针常量的代码,却不一定能够使用引用来表示。如

    int i = 5, j = 6;
    /* 合法代码 */
    int* const array[] = {&i, &j};
    /* 非法代码 */
    int& const array[] = {i, j};
    

    数据元素允许是指针常量,但是不允许是引用。

  5. 可以定义多级指针,但是没有多级引用,只能定义一级引用。

  6. 指针和引用的自增加运算结果是不一样的,指针自增加指向的是下一个地址空间,引用的自增加则是对应变量的值自增加。

  7. sizeof()引用,得到的是所指向的变量(对象)的大小,而sizeof()指针,得到的是指针本身的大小。

  8. 引用访问一个变量是直接访问,而指针访问一个变量是间接访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值