1. 指针与引用的区别

1. 指针与引用的区别

一、用于函数参数传递时的不同

指针:
指针是地址传递,但其本质上是值传递,通常实参传给形参时,被调函数的形参作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。
所以进行指针传递时,作为实参的指针本身所存的地址值是不会变的,但指针所指地址中的内容则会根据函数的不同操作而改变。
引用:
在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参的地址(int &a的形式)。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参。

从编译角度来说它们的区别:
程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以改),而引用对象则不能修改。

二、在定义、概念上的不同

  1. 指针是一个实体,而引用仅是个别名;
  2. 引用只能在定义时被初始化一次,之后不可变,指针可变;
  3. 引用没有const,指针有const,const的指针不可变;(具体指没有int& const a这种形式,而const int& a是有的, 前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变)
  4. 引用不能为空,指针可以为空;
  5. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;
  6. 指针和引用的自增(++)运算意义不一样。指针自增,是让指针指向下一内存地址,而引用自增,是引用所自带的对象本身加一;
  7. 引用是类型安全的,而指针不是,引用比指针多了自身类型检查;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值