c++指针和引用的区别与联系是什么?怎么才能做到活学活用?

夏夜辰风68


了解c/c++的读者可能会发现,指针和引用有着诸多的相似之处。指针是c语言本身就有的一个特性,而引用是c++继承了c语言指针的同时才引用的。那么它们之间隐藏的一些深层次的联系到底是怎样的呢?

指针和引用的共同点

  1. 使用它们作为形参,都可以通过该参数修改主调函数中的变量以达到参数双向传递的目的,都可以通过避免值复制的发生从而减少函数调用时的数据传递开销。
  2. 它们所占用的内存空间存储的都是地址。因为在程序运行时,变量只能依靠地址来区别,无论是指针还是引用只有存储的是地址,在运行时才能准确定位到目标,进行准确的操作。

指针和引用的区别

  1. 普通指针可以多次被赋值,也就是可以多次更改它所指向的对象,而引用则不能,引用在初始化时就指定被引用的对象,其后不能更改;

2.指针可以再次取地址,而引用则不行。



比如上表最后一行,ptr得到的是变量temp的地址,而ptr还能在取地址&ptr得到是指针的地址,而引用却不能再取地址了,因为引用本身的地址是不可以获得的,引用本身所占用的空间则被完全隐藏起来,引用一经定义后,对于它的全部行为全是针对引用对象。

3.既有常指针也有指针常量,但是只有常引用没有引用常量,详细见下图:



没有引用常量的原因在于,引用在初始化时就指定了它所引用的对象,其后不能更改,这使得引用本身就具有常量性质了。

可以肯定地说,用引用能实现的功能指针都能实现,但反过来却不行,有些时候引用还是代替不了指针的,比如:

  1. 如果一个指针所指向的对象需要用分支语句加以确定,或者在中途需要改变它所指对象的值,那么在它初始化之后需要为它赋值,而引用只能在初始化时指定被引用的对象,所以不能胜任;
  2. 有时一个指针可以是空指针,例如把指针作为函数的参数类型或返回类型时,有时会用空指针表达特定的含义,比如我们熟悉的time()函数,而没有空引用之说,所以引用不能胜任。
  3. 使用函数指针,由于没有函数引用,所以函数指针无法被引用替代。

以上的表格和代码是我亲自制作的,有错欢迎指正。以上就是我的回答,喜欢请关注小编,我们一起探讨编程中的问题。


分享到:


相關文章: