指针和引用的使用

来源:互联网 发布:银河麒麟知乎 编辑:程序博客网 时间:2024/05/01 21:15

一、指针和引用的在基础上的区分

1、指针可以为空,引用不能为空。

2、指针可以赋值,引用不能重新赋值,只能初始化。 

3、指针可以指向堆中空间,引用不可以指向堆中空间。

二、引用常见的错误

1、引用的作用范围问题

#include<iostream>
using namespace std;
class A
{
public:
A (int i){this->i=i;cout<<"costr"<<endl;}
int getI();
A(A&a)
{
this->i=a.i;
cout<<"copy"<<endl;
}
~A(){cout<<"destory"<<endl;}
private:
int i;
};
A::getI()
{
return this->i;
}
A &fuct()
{
A a(23);
return a;
}
void main()
{
A &a = fuct();
cout<<a.getI()<<endl;
}

运行结果:

因为在运行的时候,返回一个对象的引用,但是它的作用范围已经消失,所以a成了一个空的引用,使用引用来调用就成了未知的数据。

2、返回对象的结果

A fuct()
{
A a(23);
return a;
}
void main()
{
A &a = fuct();
cout<<a.getI()<<endl;
}

运行结果为:


结果是引用完成输出结果后调用析构函数。

结果和使用  A a = fuct();一样。

3、使用指针方式来是使用

A fuct()
{
A a(23);
return a;
}
void main()
{
A *a = &fuct();
cout<<a->getI()<<endl;
}

运行的结果是:

先进行析构处理,但是指针还能显示出23,因为在C++的机制中只是将那段内存标志位清空,

其它的也能使用该快内存,能显示23是因为那段内存还没有被其它的程序进行修改。

原创粉丝点击