思维导图

1. 定义:

 char* fun1(char* p1, char* p2)// 1char** fun2(char* p1, char* p2);// 2char*(*fun3)(char* p1, char* p2);// 3

1,2,3分别是什么意思呢?

    1. 很简单,char*是返回类型,fun1是函数名,括号内是参数
    1. 和1相似,char** 是返回类型
    1. 就是我们要讲的函数指针,看下面的例子:
 int (*) [10]p//数组指针

是不是和数组指针特别的相似?这里的fun3不是函数名,是指针变量,它指向一个函数。
函数指针的定义就是,一个指向函数的指针

2. 例子

我们上面定义了一个函数指针,那我们该如何使用它呢?

int Add(int a, int b)
{return a + b;
}int main()
{int(*fun1)(int a, int b);fun1 = &Add;cout << (*fun1)(1, 2) << endl;//使用函数指针cout << fun1(1, 2) << endl;//可以直接使用fun1system("pause");return 0;}

我们在使用指针的时候,需要通过钥匙“ * ”来取其指向的内存的值,函数指针使用也如此。通过用(*fun1)取出该地址的函数然后调用他。也可以直接使用fun1,因为函数名被编译后其实就是一个地址。

3.(* (void(*))()0)()

让我们来看看 《C的陷阱与缺陷》中的经典例题

  • 1.void(*),可以明白这是一个函数指针类型。这个函数没有参数,没有返回型
  • 2.(void(*)())0,这是将0强制类型转换为函数指针类型,0是一个地址,也就是说函数存在首地址为0的一段区域内。
  • 3.(* (void(*)())0)这里是取0地址开始的一段内存的内容,其内容就是保存在首地址为0的一段区域的函数
  • 4.(* ( void(*))()0)() 这里是函数调用

4.函数指针数组

 char* (*fun[3])(char* p);//函数指针数组

它是一个数组,数组名是fun,数组内存了3个指向函数的指针。这些指针指向的一些返回值类型为指向字符的指针,参数为一个指向字符指针的函数。

5.函数指针数组的指针

我一开始看到这东西我脑子里都是???,然后查了些博客啥的就弄清楚了。我们都知道什么事数组指针,套用数组指针的理解来理解函数指针数组不就好了吗?

char* (*(*fun)[3]))(char* p);
  • 1.(*fun),是一个指针。
  • 2.(*fun)[3],表示这个指针指向一个包含三个元素的数组
  • 3.去掉(* fun)[3],看上面的例子,char* (* )(char* p),可以知道数组中的三个元素是返回类型为char*型的,参数为指向字符串的函数。

什么是函数指针?(理解及使用)相关推荐

  1. (*visit)(TElemType e )函数指针理解

    基础知识 函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针.我们知道,函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,函数指针就是指向代码段中函 ...

  2. C语言工作笔记-对函数指针的进一步认识(与回调函数结合使用,并且对比C++的回调)

    目录 背景和基本概念(含与C++回调对比) 函数指针最一般的用法 函数指针结合回调 源码打包 背景和基本概念(含与C++回调对比) 毕业也有10个月了,加上实习已经工作14个月了,感觉这一年多的板砖生 ...

  3. 改善C++ 程序的150个建议学习之建议8:拒绝晦涩难懂的函数指针

    建议8:拒绝晦涩难懂的函数指针 在C/C++程序中,数据指针是最直接也是最常用的,理解起来也相对简单容易,但是函数指针理解起来却并不轻松.函数指针在运行时的动态调用中应用广泛,是一种常见而有效的手段. ...

  4. c语言函数指针的理解与使用(学习)

    1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: 1 2 3 A) char * (*fun1)(char * p1,char * p2); B) char  ...

  5. visual c++ 6.0原版_C/C++编程笔记:C语言函数指针的理解与使用,就是这么简单明了!...

    1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型 ...

  6. 对函数指针与typedef的理解:typedef void (*sighandler_t)(int)

    文章目录 缘由 解释函数指针int (\*f)(int*); 解释typedef void(*sighandler_t)(int) 缘由 2021年9月22日在刷CS:APP的时候,邂逅了一种函数指针 ...

  7. 深入理解C/C++函数指针

      函数指针数组的妙用 笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批 ...

  8. 理解复杂的C/C++声明 const, typedef , 函数指针(转贴)

    让我们从一个非常简单的例子开始,如下: int n; 这个应该被理解为"declare n as an int"(n是一个int型的变量). 接下去来看一下指针变量,如下: int ...

  9. C语言基础(三):函数名、函数指针、指针函数的理解

    函数指针 如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址.而且函数名表示的就是这个地址.既然是地址我们就可以定义一个指针变量来存 ...

最新文章

  1. Kotlin for 循环使用
  2. 阿里全球数学竞赛最强10人名单出炉:仅1人来自北大,但北大是最大赢家
  3. python商务图表_Excel职场商务图表高效制作
  4. ios macos_设计师可以从iOS 14和macOS Big Sur中学到什么?
  5. SQL语句性能优化操作
  6. ae可围绕帧拖动放大插件:Drag Zoom Pro for AE mac(兼容M1)
  7. html图片倒角,CSS实例:纯CSS打造斜角
  8. Halcon 例程学习之频域自相关变换( correlation_fft)
  9. 华为WLAN产品介绍
  10. hdu-1242 dfs+各种剪枝
  11. python爬虫和Java爬虫哪个更好
  12. SDRAM 控制器(五)——数据读模块
  13. 10个免费商用的图片网站分享
  14. 单片机外设LCD1602液晶屏的介绍
  15. python 初学之环境配置及IED搭建
  16. 逻辑备份和物理备份表级恢复
  17. 小米校招 C++研发 相机部 一二面
  18. python pymysql cursors_怎么Pythonpymysql.cursors从mysql存储过程获取INOUT返回结果
  19. 程序员之死,没一个产品是无辜的!
  20. 福慧双修(both)

热门文章

  1. 【python教程入门学习】Python黑科技:WiFi破解
  2. 《人月神话》一句话总结各章核心观点
  3. 【GIS工具】谷歌卫星图下载工具之再聊坐标问题
  4. 使用EasyExcel将本地excel数据读取后导入mysql数据库中
  5. 懵懂新手查找区 !!! 超详细项目各个层以及内置小层的用处
  6. lepus天兔数据库监控
  7. POJ 1950 Dessert
  8. 高博视觉SLAM十四讲思维导图分享
  9. Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major错误解决
  10. 紫书已经基本学完现在开启紫书题目补完计划!!!