指针和引用在C++中应用

原创 2017年06月05日 17:05:29

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

C和C ++支持与大多数其他编程语言不同的指针 其他语言包括C ++,Java,Python,Ruby,Perl和PHP支持引用。

在表面上,引用和指针都非常相似,两者都用于使一个变量提供对另一个变量的访问。 同时提供许多相同的功能,这些不同机制之间的区别往往不清楚 在本文中,我将尝试说明指针和引用之间的差异。

指针:指针是保存另一个变量的内存地址的变量 需要使用*运算符来来访问它指向的内存位置。
引用:引用变量是别名,也就是现有变量的另一个名称。 一个引用,像一个指针也是通过存储一个对象的地址来实现的。

引用可以被认为是一个常量指针(不要与一个指向恒定值的指针混淆),具有自动间接,即编译器将为您应用*运算符。

int i = 3; 

// A pointer to variable i (or stores
// address of i)
int *ptr = &i; 

// A reference (or alias) for i.
int &ref = i; 
二者区别:

1、重新分配:指针可以重新分配, 此属性对于实现数据结构(如链表,树等)很有用。请参见以下示例:

int x = 5;
int y = 6;
int *p;
p =  &x;
p = &y;
另一方面,引用不能重新分配,并且必须在初始化时分配。

int x = 5;
int y = 6;
int &r = x;

2、内存地址:一个指针在堆栈上有自己的内存地址和大小,而引用共享相同的内存地址(与原始变量),但也占用堆栈上的一些空间。 引用可以与指针非常相似的方式传递给函数,存储在类中等等。 指针是一个独立变量,可以分配新的地址值; 而引用一旦被赋值,将永远不会引用任何新对象,直到变量超出范围。

3、NULL值:指针可以直接分配NULL,而引用不能。 与引用相关联的约束(无NULL,无重新分配)确保底层操作不会遇到异常情况。

4、间接:您可以指向提供更多间接级别的指针的指针, 而引用仅提供一级间接。

5、算术运算:可以对指针执行各种算术运算,而引用没有称为参考算术的东西(但是可以使用引用指向的对象的地址,并在&obj + 5中进行指针算术运算)。

什么时候使用?

性能完全相同,因为引用在内部实现为指针。 但是,您仍然可以留意一些点来决定何时使用:

注意事项:

使用引用:在函数参数和返回类型中。
使用指针:实现链表,树等数据结构及其算法。
如果需要指针算术或传递NULL指针,则使用指针。 例如对于数组(请注意,数组访问是使用指针算术实现的)。

引用通常都优于指针, 这通常意味着引用在类的公共接口中最有用。


版权声明:本文为博主原创文章,未经博主允许不得转载。

C/C++何时使用引用和指针

指针与引用看上去完全不同,但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?...
  • wyg1065395142
  • wyg1065395142
  • 2016年08月13日 11:25
  • 2371

指针和引用作为参数的区别

int change1(char* name){     name=”alter”;     return 1; } int change2(char* &name){     na...
  • tkp2014
  • tkp2014
  • 2015年08月04日 23:32
  • 370

C++指针应用

int main() {   char str1[] = "hello world";   char str2[] = "hello world";   char* str3[] = ...
  • sinat_29844779
  • sinat_29844779
  • 2017年02月22日 18:57
  • 244

C++11 右值引用左值引用详解

C++11 引用 LValue/RValueReference 引用Reference 引用的声明: T  &ref  =  object ; T  & ref ( object ) ;   T ...
  • wlk1229
  • wlk1229
  • 2017年03月27日 00:26
  • 324

关注C++细节——浅谈指针使用中注意事项

相信大家对指针的用法已经很熟了,这里也不多说些定义性的东西了,只说一下指针使用中的注意事项吧。 一.在定义指针的时候注意连续声明多个指针时容易犯的错误,例如int * a,b;这种声明是声明了一个指向...
  • IAccepted
  • IAccepted
  • 2011年09月02日 09:52
  • 5017

java的引用和C++的指针有什么区别

大多数的C++程序员转学java的时候,都有这样一个疑问,java的引用就是C++的指针吗。其实不完全对,他们之间既有前四外绿的联系, 也有很大的区别。 java的引用和C++的指针都是指向一块内存...
  • fanfan199312
  • fanfan199312
  • 2015年07月10日 22:04
  • 1132

指针的引用,举例数据结构中的应用

指针的传递 当把指针作为一个参数传给函数使用时,传递的是指针的一个副本,即指针的值传递。如果在函数内部修改指针时会出现问题,这样只是修改指针的副本,而原来的指针保留着原来的值。 指针的指针 将指...
  • huanghxyz
  • huanghxyz
  • 2017年11月13日 00:15
  • 66

从符号表来理解指针和引用

一.符号表: 1.普通类型: 简单说来符号表是用来储存源代码中出现的有关名字的信息,对应到本文中就是保存了变量的名称和变量在内存中分配的首地址。 比如代码: int main(int argc, ch...
  • easion_zms
  • easion_zms
  • 2015年06月01日 18:05
  • 748

指针的引用在函数中的应用

#include using namespace std; int *&FuncTest(int *&p,int &m) { p=&m; return p; } void ...
  • silyvin
  • silyvin
  • 2012年01月04日 20:36
  • 832

传值,传指针和传引用区别和联系

C++写了很多年,有一天,写着写着代码。竟然自己发现对传值,传指针,传引用这个每天都在用的传递方式的区别还不是很清楚。以为自己懂了,其实还理解得还不够深入,基础还需要花时间琢磨。今天参考了很多篇博客和...
  • zx3517288
  • zx3517288
  • 2016年11月27日 12:15
  • 802
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针和引用在C++中应用
举报原因:
原因补充:

(最多只允许输入30个字)