指针和引用

为什么使用指针

  • 每一个编程语言都使用指针(C++将指针暴露给程序员 而java等其他语言将指针隐蔽起来)
  • 指针能够有效的表示数据结构
  • 能动态分配内存,实现内存的自由管理
  • 能方便的使用字符串
  • 指针直接与数据的存储地址有关

值传递不如地址传递高效,因为值传递先从实参的地址中取值,再赋值给形参代入函数计算。而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高

指针和引用的区别

本质

  • 引用是别名
  • 指针是地址

具体

现象:
指针可以在运行时改变所指向的值,而引用一旦与某个对象绑定之后就不能再改变。指针可以被重新赋值用来指向另一个对象,但是引用则总是在初始化时被指定的对象,以后不能改变,但是指向的内容可以改变

string str1 = "a";
string str3 = "b";
string &str2 = str1;
str2 = str3;

str2是str1的别名 已经映射了str1的地址 不能再映射其他的地址 不能作为其他变量的别名了
内存分配:
程序为指针变量分配内存区域,而不为引用分配内存区域。因为引用声明时必须初始化从而指向之歌已经存在的对象,引用不能为空值
编译
程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表声称之后就不会再改,因此指针可以改变指向的对象,而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。某种意义上引用可以被认为是不能改变的指针。
理论
指针没有级数限制 但是引用只有一级
效率
两者的效率是一致的,因为在底层中,指针和引用的参数都指向同一个地址
用*传参可能会指向空的地址或者错误的地址,所以要时时判断参数是否为空,导致降低效率 而用&传参,则参数不可能为空或者错误地址。
其他
对引用使用sizeof得到的是变量的大小 而对指针使用得到的是变量的地址的大小
++操作,对引用的操作直接反应到所指向的对象,而不是改变指向,而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

waxuuuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值