指针和引用在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++课程 指针的应用

  • 2016年02月21日 09:24
  • 2.32MB
  • 下载

C/C++高阶语法:函数指针及其应用

1、在讲函数指针之前,我们先明白C/C++中常见的指针函数。    int * GetData(int num); 形如上面的形式的为指针函数, 指针函数实际上就是函数,只是返回类型为指针。在结构体...

C++指针经典应用

  • 2014年01月11日 00:44
  • 112KB
  • 下载

C++指针及数组应用

  • 2008年11月13日 19:21
  • 42KB
  • 下载

应用C++成员指针需要遵守的两个规则

规则1:*需要与间接引用的对象结合,因为类内部是没有地址的,所以成员指针只是代表对象内一定的偏移 规则2: 当获取成员函数的地址(偏移地址)时,符号&是必要的,这与非成员函数指针的用法不同 ...

C C++指针应用详解

  • 2008年09月12日 11:38
  • 86KB
  • 下载

初学者必读C/C++指针应用

初学者必读C/C++指针应用 C++中,成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中,每个线程都通过指向成员函数的指针来调用该函数。在这样的...

C++指针应用及注意问题

  • 2011年08月18日 19:45
  • 19KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针和引用在C++中应用
举报原因:
原因补充:

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