指针与引用的区别

来源:互联网 发布:Mac版本好玩的网络游戏 编辑:程序博客网 时间:2024/06/01 08:02

       指针指向一块内存,他的内容是所指内存的地址,引用是某块内存的别名,用于定义一个变量来共享另一个变量的内存空间。但是两者并非完全相同,他们之间的差别具体表现在以下几个方面:

      ⑴ 初始化不同
    引用:在创建时必须初始化,即引用到一个有效的对象,否则会引起编译错误。
    指针:在定义时不必初始化(但不推荐,可能回出现野指针),可以在定义后面的任意地方重新赋值。
      ⑵ 可修改性不同
    引用:“从一而终”。一但被初始化为指向一个对象,它就不能被改变为另一个对象的引用,否则会引起编译错误。
    指针:可以在任何时候都可以改变为指向另一对象。
      ⑶ 是否存在NULL
    引用:不存在NULL引用,引用不能使用指向空值的引用,必须总是指向某个对象。
    指针:可以是NULL,不需要总是指向某些对象,可以把指针指向任意对象。
    基于这一点不同,在函数的参数传递时,传引用要比传指针更安全。(因为指针存在空指针/野指针)

    下面看一个具体的例子:
       eg1:看代码找错误:
#include <iostream>using namespace std;int main(int argc,char* argv[]){        int   a = 1, b=2;        int   &c;        int   &d=a;        &d = b;        int *p;        *p = 5;        return 0;}

         answer:
           代码第7行,编译错误。引用变量c没有初始化
       代码第9行,编译错误。d定义为a的别名,但引用不具有可修改性
       代码第11行,运行时错误。由于p没有被初始化,此时的p是野指针,对野指针的内容赋值是非常危险的,会导致程序奔溃。


0 0
原创粉丝点击