指针与引用的比较

原创 2004年08月10日 20:13:00

在给函数参数传递方式作总结的过程中,让我对引用类型有了更进一步的认识。引用类型(reference)是在C++特有的一种新类型(与C相比较),在很多情况下,它提供了与指针操作同等的能力。而且在很多情况下,使用引用是更好的方式。

                既然我们在这里要比较指针与应用,那么首先得清楚引用的具体含义。引用是一个const的指针,即一旦引用被赋值了,就不允许改变了,这和声明其他类型的const变量是一样的,同时在声明的同时必须为其赋值,否则是无法编译通过的。(Since you can't change the reference after you define it, you must bind the reference to an object at the beginning of its lifetime.)[1]

       第一点,使用引用类型,代码在编译的过程中,编译器会自动地为其解引用(disrefence), 而不需要象使用指针那样,显示的使用解引用操作符(*)。这样就使得代码更加清晰而易读了。这一点在使用enum类型的时候特别明显。下面是一个例子:

[2]  enum day

{  Sunday, Monday, Tuesday,

  Wednesday, Thursday, Friday,

  Saturday, not_a_day

 };

day d;

d = Sunday;

while (d <= Saturday)

{

 // do something with d

 ++d;

}

         以上代码是不能编译通过的,因为++运算符并不能左右于day类型,虽然我们可以在声明d的时候,使用int而使得编译通过,但是这样做减弱编译器对于类型的检查能力。那么我们需要做的是将++运算符重载。

 day &operator++(day &d)

{

  d = (day)(d + 1);

  return d;

}

         通过返回引用的方式,而不是指针的方式,可以在使用这个被重载的运算符的时候就象使用内建的运算符一样。但是如果使用的是返回指针的方式的话:    

 day *operator++(day *d)

{

  *d = (day)(*d + 1);

  return d;

}

         在调用这个运算符的时候,就不得不使用++&d了。

         第二点,swap(a,b)这种函数调用的方式,传递的既可以是值,也可以是引用,而这是由函数的型参决定的。因此也有人认为,使用swap(&a, &b)会认为更加清晰,毕竟这样就知道传递的是指针了,一目了然。在这里,我不由想起C#中的语法,不仅在函数的型参中显式声明传递的是引用还是值,还要在函数被调用的时候体现出来,如swap( ref a, ref b)。从这里可以看出C#在语法上会更加严谨。

 

指针和引用的区别与相同点

原文地址:http://blog.csdn.net/will130/article/details/48730725 一、指针和引用的定义和性质区别: (1) 指针:指针是一个变量,只不过...
  • metheir
  • metheir
  • 2017年03月01日 12:10
  • 1256

c语言中变量的引用传递和指针

掌握了引用型变量和指针,才能深入掌握面向过程的函数调用机制。 引用型变量存储的是变量的地址,指针存储的也是变量的地址,所以本质上来说二者是一样的。 使用引用型变量,子函数中所有的操作会直接修改主函数中...
  • matrix_google
  • matrix_google
  • 2017年08月02日 19:25
  • 366

理解指向指针的引用

在做项目时,用到第三方的API:RequestService( string *reqst, string *&Rsp)       怎么来调用这个API呢?由于对指针的使用不熟悉,分别作了如下尝试:...
  • acs713
  • acs713
  • 2013年10月09日 16:11
  • 13568

使用引用还是使用指针

最近碰到一个面试题:何时使用指针,何时使用引用? 首先,标准 C 中是没有引用形参的,只能使用指针形参,应用是c++才加入的,c++中,引用可以看做变量的别名。 那么引用和指针有什么区别呢?主要有...
  • ljthdu
  • ljthdu
  • 2014年07月29日 16:52
  • 1216

C++对象指针比较比较的并不是地址值

在C++中,在有继承的情况下,一个对象可以有多个有效地址,因同一个子类对象,被不同的父类指针指向时,各个父类指针的值是不同的。分析一段如下代码:#include #include using nam...
  • u010154685
  • u010154685
  • 2017年01月27日 16:40
  • 832

C++中引用,指针,指针的引用,指针的指针

目录(?)[+] 定义一个指针的三种写法都对:1. int * p;  2. int* p;  3. int *p; 习惯不同而已 定义一个函数指针的三种写法都对:...
  • hr10707020217
  • hr10707020217
  • 2013年06月25日 15:22
  • 2728

指针和引用的比较

一 Reference 和指针的区别 虽然使用引用(reference)和指针都可间接访问另一个值,但它们之间有两个重要区别。第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的。第二个重...
  • wzhiu
  • wzhiu
  • 2014年07月01日 14:10
  • 1046

引用与指针的比较

函数是C++/C程序的基本功能单元,其重要性不言而喻。函数设计的细微缺点很容易导致该函数被错用,所以光使函数的功能正确是不够的。本章重点论述函数的接口设计和内部实现的一些规则。 函数接口的两个要素是...
  • zhuxianjianqi
  • zhuxianjianqi
  • 2013年05月18日 21:29
  • 984

C++引用与指针的比较

引用是C++中的概念,初学者容易把引用和指针混淆一起。 一下程序中,n是m的一个引用(reference),m是被引用物(referent)。 int m; int &n = m; n...
  • genghaihua
  • genghaihua
  • 2013年11月20日 09:17
  • 772

C++引用与指针的比较

引用是C++中的概念,初学者容易把引用和指针混淆一起。  一下程序中,n是m的一个引用(reference),m是被引用物(referent)。  int m;  int &n = m;  n...
  • Congrashino
  • Congrashino
  • 2014年12月11日 00:23
  • 165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针与引用的比较
举报原因:
原因补充:

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