C/C++编程笔记:C++中的指针与引用,又在何时使用?

C和C ++支持与大多数其余编程语言不一样的指针。其余语言包括C ++,Java,Python,Ruby,Perl和PHP。 html

从表面上看,引用和指针很是类似,都用于使一个变量提供对另外一变量的访问。二者都提供了许多相同的功能,所以一般不清楚这些不一样机制之间的区别。在本文中,我将尝试说明指针和引用之间的区别。 算法

指针:指针是一个变量,用于保存另外一个变量的内存地址。须要使用*运算符将指针取消引用,以访问其指向的内存位置。 编程

引用:引用变量是别名,即已经存在的变量的另外一个名称。引用(如指针)也经过存储对象的地址来实现。 数组

能够将引用视为具备自动间接指向的常量指针(不要与指向常量值的指针混淆!),即编译器将应用*运算符。 微信

差别:  

1.初始化:数据结构

指针能够经过如下方式初始化: app

int a = 10;int * p =&a;            编程语言

 或者int * p;p =&a;咱们能够在同一步骤或多行中声明和初始化指针。函数

在引用中, int a = 10;int&p = a; //它是正确的  但int&p; p = a; //这是不正确的,由于咱们应该一步一步声明和初始化引用。性能

注意:编译器之间的差别可能有所不一样。以上差别是针对Turbo IDE的。 

2.从新分配:能够从新分配指针。此属性对于实现数据结构(例如链表,树等)颇有用。

请参见如下示例: 

int a = 5;int b = 6;int * p;p =&a;p =&b;

另外一方面,引用不能从新分配,必须在初始化时分配。

整数a = 5;int b = 6;int&p = a;int&p = b; //在这一行它将显示错误,由于“不容许多个声明”。可是,这是有效的声明,int&q = p;

3.内存地址:指针在堆栈上有其本身的内存地址和大小,而引用共享相同的内存地址(与原始变量),但也占用了堆栈上的一些空间。

  int&p = a;  cout <<&p << endl <<&a;

4.NULL值:指针能够直接分配为NULL,而引用则不能。与引用关联的约束(无NULL,无从新分配)确保基础操做不会遇到异常状况。

5.间接:您可使用指向提供额外级别间接的指针。而引用仅提供一种间接级别。即, 

在指针中整数a = 10;int * p;int ** q; //它是有效的。p =&a;q =&p;而在参考文献中,int&p = a;整数&& q = p; //它是对引用的引用,所以是错误。

6.算术运算:能够对指针执行各类算术运算,而没有所谓的引用算术。(可是您能够像引用&obj + 5那样获取引用指向的对象的地址并对其进行指针算术)。 ) 

什么时候使用什么

性能彻底相同,由于引用在内部做为指针实现。可是,您仍然能够记住一些要点,以决定什么时候使用什么:  

使用引用 :在函数参数和返回类型中。

使用指针: 若是须要使用指针算术或传递NULL指针,请使用指针。例如对于数组(请注意,数组访问是使用指针算术实现的)。

因为要指向不一样的单元格,所以要实现诸如链表,树等的数据结构及其算法,咱们必须使用指针的概念。

C ++ FAQ Lite中引用:可使用引用,而必须使用指针。每当您不须要“从新放置”时,一般首选使用引用而不是使用指针。这一般意味着引用在类的公共接口中最有用。引用一般显示在对象的外观上,而指针则显示在对象的外观上。 

上面的例外是函数的参数或返回值须要“reseating”引用,即不引用对象的引用。一般最好经过返回/获取一个指针,并赋予NULL指针特殊的意义来完成此操做(引用必须始终是别名对象,而不是取消引用的空指针)。 

天天学点小知识,但愿对你有帮助~

另外若是你想更好的提高你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许能够帮到你~

C语言C++编程学习交流圈子【点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比本身琢磨更快哦!

相关文章
相关标签/搜索