区分指针和引用

区分指针和引用

指针和引用是C++中非常基础的概念,它们通常可以做相同的事情,可以帮助找到对应的对象,但是它们表现形式不一样,有着一些本质的区别。我们需要知道它们有什么区别,什么时候使用指针,什么时候使用引用。

指针(pointers)使用*->操作符,而引用(references)使用&.操作符。

指针指向所指对象的内存地址,它的内容是所指内存的首地址。而引用则是某块内存的别名,或者说是其表示对象的别名。

比如上海市这个我们要操作的对象,当我们需要找到它时,我给了你一个纸条,上面写着东经120°52,北纬30°40′,这个纸条就是指针,你可以通过它找到上海的位置。而另外,上海又叫着魔都,这次没有纸条,魔都只是一个名字,不是实体,但是你可以通过这个名字直接操作,比如魔都.封城(3个月)纸条->封城(3个月),这两个操作会做相同的事情。

所以可以理解,指针保存的是所指对象的地址(实体),引用仅仅是对象的别名(非实体),指针需要通过解引用间接访问,而引用是直接访问。

C++开发者需要认知到,没有所谓的null reference,因为引用是一个对象的别名,一个引用一定是代表了某个对象。

当然,如果你特别杠精,要这么问,下面这种情况是个啥情况:

1
2
int *num1 = nullptr;
int& num2 = *num1; // 让引用代表了null pointer的解引值。

这种情况,编译器可能回编译通过,但是不要这么干,永远不要对null pointer引用

加上上面提到的这个,建议记住这三点:

  1. 没有所谓的null reference
  2. 引用必须有初始值。因为它一定是代表某个对象。
  3. 指针可以被重新赋值,但是引用始终代表它最初获得的那个对象(那块内存)

上面的第三点,我们可以看看下面的操作:

1
2
3
4
城市 上海;
城市 安徽;
城市& 魔都 = 上海;
魔都 = 安徽;

上面这段并不是代表魔都以后是安徽的别名了,魔都依然代表了上海这个城市,只不过这个城市已经变成了安徽,它们是地图上的两个地方,但是是两个长得一模一样的城市了,都是安徽那般模样,而魔都还是代表靠海那个地方,始终没变。



关注博客或微信搜索公众号多媒体与图形,获取更多内容,欢迎在公众号留言交流!
扫一扫关注公众号
作者

占航

发布于

2022-07-03

更新于

2023-10-04

许可协议

评论