设为首页 加入收藏

TOP

C++指针、引用知多少(二)
2014-04-06 17:35:51 来源: 作者: 【 】 浏览:254
Tags:指针 引用 多少

 

  函数指针

  我们经常会需要动态的调动几个函数的某一个,如果我们只是if else那代码量可能有时候会比较大,有没有可以在函数参数中直接传递一个函数呢?

  答案是不可能的,但是我们有一种方式可以实现,那就是通过指针函数来说。

  typedef void (*pf)(int &m,int *n);

  这是什么意思呢?他的意思就是说pf是一个指针函数,他可以指向任意的返回值为void,并且参数是int &m和int *n的函数。

  同样我们声明pf f;就可以把f作为一个函数了,也可以把f当做一个参数传到函数体中了。具体例子见下面。

  1 void swap(int &m,int *n); //定义一个有两个参数的函数swap

  2 typedef void (*pf)(int &m,int *n);//

  3 void print(int &m,int *n,pf x);//定义一个能传递指针函数的函数

  4 int _tmain(int argc, _TCHAR* argv[])

  5 {

  6     int m=6,q=20;

  7     pf f=swap;

  8     int* n=&q;

  9     f(m,n);

  10     cout《&m《*n;

  11     print(m,n,f);

  12     system("pause");

  13     return 0;

  14 }

  同样的道理,我们也可以返回一个指针函数,只不过返回类型是pf.它返回的实际类型应该是 void (*)(int&,int*);解释起来就是一个指向两个传输的函数指针。

  我们可以定义一个 pf fun();他就返回的是函数指针了。

  引用&

  实际上引用能起到的作用,*很多时候也能够起到,那为什么我们还经常说,要尽量使用引用呢?最大的优点就是指针更安全。当然某些情况下例外。

  引用可以认为是一个别名,而指针则是一个实体,虽然他们都有地址的概念在里面。

  这里主要描述一下引用和指针的不同之处。

  1、指针是可以重新指向另外一个对象,而引用不行,引用一旦绑定那就不能再绑定其他了,引用的这种性质有一点嫁鸡随鸡嫁狗随狗的意味在里面。这对男人是不是更安全呢?O(∩_∩)O哈哈~

  2、指针可以是空指针,但是引用不能是空引用啊,所以引用都是必须初始化的。

  3、指针是指向一个实体(程序为指针变量分配内存区域),而指针则是一个别名,这个可以怎么理解呢?我们通过sizeof(指针)和sizeof(引用)可以知道,前者是指针的大小,一般为4,而后者则是引用对象的大小,也就是说,如果对一个字符串长度为100的字符串进行引用sizeof是100哦,而指针还是4.

  4、如果需要返回动态分配的对象或者内存,应该使用指针,引用很有可能引起内存泄露问题。

  当然还有其他的一些不同,但是总体来说都是由以上衍生出来的。

  其实引用本质上来说是一种指针,只不过编译器进行了优化(所以指针更加灵活),所以引用具有指针的特点,又更安全。

      

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++深度拷贝与构造函数的异常 下一篇C++中类的特殊数据成员的构造

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)
·C语言指针的定义和使 (2025-12-26 05:21:31)
·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)