引用和指针!
引用和指针!
C++中引用和指针的区别:
1 、要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象,因为引用肯定会指向一个对象,在C++里,引用应被初始化。指针没有这样的限制,不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。
例如:
void printDouble(const double& rd)
{
cout << rd; // 不需要测试rd,它肯定指向一个double值
}
相反,指针则应该总是被测试,防止其为空:
void printDouble(const double *pd)
{
if (pd)
{ // 检查是否为NULL
cout << *pd;
}
}
2 、指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象
引用则总是指向在初始化时被指定的对象,以后不能改变。
string s1="John";
string s2="Billy";
string &rs=s1;//rs引用s1
string *ps=s1;//ps指向s1
rs=s2;//rs仍引用s1,但此时s1的值为"Billy"
ps=s2;//ps指向s2,但s1此时的值没有发生改变
3、 引用只是个变量的别名 不占用存储空间
1 、要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象,因为引用肯定会指向一个对象,在C++里,引用应被初始化。指针没有这样的限制,不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。
例如:
void printDouble(const double& rd)
{
cout << rd; // 不需要测试rd,它肯定指向一个double值
}
相反,指针则应该总是被测试,防止其为空:
void printDouble(const double *pd)
{
if (pd)
{ // 检查是否为NULL
cout << *pd;
}
}
2 、指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象
引用则总是指向在初始化时被指定的对象,以后不能改变。
string s1="John";
string s2="Billy";
string &rs=s1;//rs引用s1
string *ps=s1;//ps指向s1
rs=s2;//rs仍引用s1,但此时s1的值为"Billy"
ps=s2;//ps指向s2,但s1此时的值没有发生改变
3、 引用只是个变量的别名 不占用存储空间
指针是个变量 占用存储空间
==================
今天重新学习了指针和引用的区别
不得不赞叹c++标准小组
引用这个东西,对于c语言来说,真的是指针升级版,
在 代码执行效率,安全性 两个方面得到了提升。
但是在灵活性上,的确不如指针,不过指针特性是被全部保留的。
综合来说,引用很好狠强大。
C++,想说爱你不容易