千家信息网

如何进行C++函数指针的内容介绍

发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,如何进行C++函数指针的内容介绍,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C++语言的原始版本是由C语言的一种叫C with Cla
千家信息网最后更新 2025年11月17日如何进行C++函数指针的内容介绍

如何进行C++函数指针的内容介绍,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

C++语言的原始版本是由C语言的一种叫C with Class的***版本演化而来的。之所以叫C++,是因为人们想通过C语言的++运算符来体现其是C语言的进化版本。我们今天就来为大家详细介绍一个其中的基础概念,关于C++函数指针的具体内容。

在C/C++中,数据指针是最直接,也最常用的,因此,理解起来也比较容易。而函数指针,作为运行时动态调用(比如回调函数 CallBack Function)是一种常见的,而且是很好用的手段。

我们先简单的说一下C++函数指针。

常规函数指针

void(*fp)();

fp 是一个典型的函数指针,用于指向无参数,无返回值的函数。

void(*fp2)(int);

fp2 也是一个C++函数指针,用于指向有一个整型参数,无返回值的函数。
当然,有经验人士一般都会建议使用typedef来定义函数指针的类型,如:

typedef void(* FP)();  FP fp3; // 和上面的fp一样的定义。

C++函数指针之所以让初学者畏惧,最主要的原因是它的括号太多了;某些用途的函数指针,往往会让人陷在括号堆中出不来,这里就不举例了,因为不是本文讨论的范围;typedef 方法可以有效的减少括号的数量,以及理清层次,所以受到推荐。本文暂时只考虑简单的函数指针,因此暂不用到typedef。

假如有如下两个函数:

void f1()  {  std::cout << "call f " << std::endl;  }  void f2(int a)  {  std::cout << "call f2( " << a << " )" << std::endl;  }

现在需要通过C++函数指针来调用,我们需要给指针指定函数:

fp = &f1; // 也可以用:fp = f1;  fp2= &f2; // 也可以用:fp2= f2;  void (*fp3)() = &f1; // 也可以用:void (*fp3)() = f1;   //调用时如下:  fp(); // 或 (*fp)();  fp2(1); // 或 (*fp2)(1);  fp3(); // 或 (*fp3)();

对于此两种调用方法,效果完全一样,我推荐用前一种。后一种不仅仅是多打了键盘,而且也损失了一些灵活性。这里暂且不说它。

C++强调类型安全。也就是说,不同类型的变量是不能直接赋值的,否则轻则警告,重则报错。这是一个很有用的特性,常常能帮我们找到问题。因此,有识之士认为,C++中的任何一外警告都不能忽视。甚至有人提出,编译的时候不能出现任何警告信息,也就是说,警告应该当作错误一样处理。

比如,我们把f1赋值给fp2,那么C++编译器(vc7.1)就会报错:

  1. fp2 = &f1; // error C2440: "=" :
    无法从"void (__cdecl *)(void)"转换为"void (__cdecl *)(int)"

  2. fp1 = &f1; // OK

这样,编译器可以帮我们找出编码上的错误,节省了我们的排错时间。

考虑一下C++标准模板库的sort函数:

// 快速排序函数  template void sort(  RandomAccessIterator _First, // 需排序数据的***个元素位置  RandomAccessIterator _Last, // 需排序数据的***一个元素位置(不参与排序)  BinaryPredicate _Comp // 排序使用的比较算法(可以是C++函数指针、函数对象等)  );

比如,我们有一个整型数组:

int n[5] = {3,2,1,8,9};

要对它进行升序排序,我们需定义一个比较函数:

bool less(int a, int b)  {  return a < b;   }

然后用:

sort(n, n+5, less);

要是想对它进行降序排序,我们只要换一个比较函数就可以了。C/C++的标准模板已经提供了less和great函数,因此我们可以直接用下面的语句来比较:

sort(n, n+5, great);

这样,不需要改变sort函数的定义,就可以按任意方法进行排序,是不是很灵活?

这种用法以C++的标准模板库(STL)中非常流行。另外,操作系统中也经常使用回调(CallBack)函数,实际上,所谓回调函数,本质就是C++函数指针。

看起来很简单吧,这是最普通的C语言指针的用法。

看完上述内容,你们掌握如何进行C++函数指针的内容介绍的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

函数 指针 C++ 排序 内容 方法 语言 括号 数据 标准 模板 版本 类型 问题 编译 之所以 也就是 也就是说 位置 元素 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 综合实践网络安全教学设计 安卓直播软件开发 手机通话服务器会录音吗 闵行区人工智能应用软件开发优势 网络安全人员紧缺 数据库登陆密码被加密了 一个数据库查询其他数据库里的表 无人深空字节节拍数据库怎么退 erp 数据库详细设计 嵌入式开发 算法 软件开发 网络安全宣传微视频小学生 2021中国互联网大会数据库 互联网的含义科技含义 怎么把c连接数据库 城市规划数据库 上海探铭网络技术有限公司 保密制度与网络安全 魔兽平台卡同步数据库 山西创新服务器厂家 服务器配置文件修改 js如何读取云盘上的数据库 路客游互联网科技 广东曙光服务器维修虚拟主机 嵌入式软件开发高压是指什么 合肥网络技术咨询定做价格 信阳市网络安全周 柴米油盐酱醋茶吉他谱软件开发 网络安全工作强度怎么样 东莞酒店软件开发常见问题 数据库集群架构项目需求
0