有了指针,为什么还需要引用?指针和引用有什么差别?

指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们有着相同的功能

 

指针和引用有着什么差别?

第一点

不管在什么情况下,都不能使用空引用

但是,指针可以为空

char &ab;     //error,引用不能为空
char *ptr = NULL;    //指针可以为空
//如果你想通过以下代码让引用为空,这就像拿石头打自己
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空的指针

 

 

第二点

引用在初始化后就不能修改

指针可以指向其他地址


char a = '#';
char b = '*';
char *p = &a; //指针指向a
p = &b;                    //指针指向b
char &r = a;  //引用a
r = b;               //把a设为b,而不是变成引用b

 

 

既然指针那么强大,为什么我们还需要引用?
第一点

指针的效率比较好因为

指针需要检查是否为空

引用不需要检查(因为引用不能为空)

//检查指针是否为空
int foo(int * p)
{
if (p == NULL)
return 0;
}

 

 

第二点

引用能够更好的支持操作符重载operator overloading

如果用指针来operator overloading操作

const int operator +(const int *a, const int *b);
//那么使用的时候
int a = &b + &c;     //这样看起来是不是很辛苦
//如果使用引用
const int operator +(const int &a, const int &b);
int a = b + c;             //是不是更好呢

 

 

  更多讨论在 点我进入