您的位置:首页 > 其它

引用和指针的区别。

2014-08-10 23:15 246 查看
1 非空区别

任何情况下都不能使用空值的引用。指针可以。

比如下面的代码有问题。

void main()
{
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空值
//cout << rc <<endl;
}


2合法性区别

因为引用不能指向空值,所以不需要检测它的合法性。而指针可能指向空值,必须检查其合法性。比如下面代码

#include <iostream>
using namespace std;

void check1 (int const & r_a)
{
cout << r_a <<endl;
}

void check2(int * p_a)
{
if(p_a)
cout << *p_a <<endl;
else
cout << "null" <<endl;
}

void main()
{
int *pc = NULL; // 设置指针为空值
//int& rc = *pc; // 让引用指向空值  错误做法!!!!
//cout << rc <<endl;
check1(2); //输出 2
check2(pc); //输出null
}
check1函数不需要检测,check2函数需要检测

3可修改区别

指针可以被重新复制,指向另一个对象。但是引用一旦指向了一个对象,便从此"从一而终”.忠心啊。

#include <iostream>
using namespace std;

void main()
{
//准备
int a=3;
int b=4;
int change=50;
int &r_a=a;
int * p_b=&b;

//引用r_a便从此指向a,但是p_b可以改变。
p_b=&change;//*p_b的值是50.指向了change这个变量。b依然是4
r_a=50;//r_a的值也是50. 它永远指向a,所以a的值为50.
cout << *p_b << b << r_a << a;// 50 4 50 50
}


4应用的区别根据是否以后可能修改为空或者不为空情况下选择使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: