使用引用还是使用指针

来源:互联网 发布:java冒泡排序法代码 编辑:程序博客网 时间:2024/05/18 02:18

最近碰到一个面试题:何时使用指针,何时使用引用?

首先,标准 C 中是没有引用形参的,只能使用指针形参,应用是c++才加入的,c++中,引用可以看做变量的别名。

那么引用和指针有什么区别呢?主要有两点

(1)指针变量可以为空(引用必须指向具体对象,必须初始化)

(2)指针变量可以被重复赋值或更改(引用则不行,一经赋值不能再改,只能改变变量的值)


最后,使用指针还是引用呢

在c++中,引用可以认为是多余的,几乎所有使用引用可以完成的任务都可以使用指针来完成。

        大多数情况下,应该使用应用而不是指针,引用可以让程序整洁并易于理解,此外,引用比指针安全:不可能存在无效的引用,也不需要显式的解除引用。对象的引用甚至可以像指针那样支持多态性。只有在需要改变所指地址的时候,才需要指针。例如:当动态分配内存的时候,应该讲结果存储在指针而不是引用中。

      还有一种方法可以判断使用指针还是引用作为参数以及返回类型:考虑谁拥有内存。如果接受变量的代码负责释放相关对象的内存,必须使用指向对象的指针,如果接受变量的代码不需要释放内存,那么应该使用引用。


通俗点讲,可以归为以下几点:

(1)、考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。你必须使用指针

(2)、如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,例如你的设计不允许变量为空,那么你应该使用引用

(3)、如果数据对象是较大的结构,则使用const指针和或const引用,以提高程序的效率,类对象在数据结构和语义上非常适合使用引用,这也是C++新增引用这项特性的主要原因。因此传递类对象参数的标准方式是按引用传递。

(4)、当你重载某个操作符时,你应该使用引用

(5)、当数据对象是数组,则应该使用指针,虽然可以使用引用,但是当使用引用时,必须指明所引用数组的大小,没有使用指针方便。


0 0
原创粉丝点击