深究指针与引用的差别

来源:互联网 发布:99scsc最新域名 编辑:程序博客网 时间:2024/05/22 11:34

学习C++很长时间,一直没有深究过引用与指针,感觉应该深入的了解下它们的区别:

由指针定义知,是指向内存中某个存储体对象的变量。它可以指向简单变量, 数组,结构体等,甚至函数 (函数指针)。个人在此有一个疑问,既然指针是指向存储体的变量,而函数没有存储性质,那函数指针如何实现的?

我是从这感觉函数没有存储性质:

class  A{   int  i; int fun(int );};
大家都知道这个类内存中sizeof(A)= 4; 即它的内存完全是分配给(int)变量的。所以它的成员函数(int  fun(int))没有存储性质。所以就不明白函数指针的实现?

不知道上面的推理正确吗? 还请大神指点

先绕过这个问题,我们继续说指针和引用

引用的定义很简单,就是对象的别名。是一种复合类型,不能定义引用类型的引用,可以定义其他类型的引用。

具体来说引用和指针有以下几点区别:

 1: 非空区别。 任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但该变量可能某段时间不指向任何对象,你就应该声明一个指针。因为你可以赋空值给该指针。相反,如果你可以确定变量一直指向某个对象,就可以使用引用。不存在指向空值的引用。


2: 合法性区别。使用引用可以不用测试它的合法性,但是指针就必须测试它的合法性,防止空指针。就好比有指针传入函数,函数就必须检测指针的合法性。


3:可修改性。指针可以被修改指向不同的对象。但是引用一直指向初始化时被指向的对像,不能改变,但指向对象的内容可以改变。有些像 int  * const  A ;这个变量。所以引用的初始化很重要。


4: 应用区别。总的来说,以下情况使用指针,一是考虑到可能存在不指向任何对象时候(空值);二是 存在需要指向其他对象的情况。如果需要一个指向一个一直存在的对象,并且不改变它的指向的对象就可以使用引用。



1 0
原创粉丝点击