指向函数指针数组的指针_指针数组 数组指针

指向函数指针数组的指针_指针数组 数组指针详细解析函数指针,函数指针数组相关知识函数指针,顾名思义就是函数的指针。如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变

详细解析函数指针,函数指针数组相关知识   函数指针,顾名思义就是函数的指针。如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。   函数指针 函数指针的定义函数指针的简单使用练习1练习2附加题附加题1附加题2 函数指针数组函数指针数组的定义函数指针数组的用途:简易计算器的实现   函数指针的定义   先来看一段代码:   
在这里插入图片描述   此时输出的两个地址就是test函数的地址   在明确函数确实是有地址之后我们就要考虑如何定义函数指针变量了,它和以往我们所使用的指针变量定义略有不同   给一个例子   这就是一个函数指针,首先因为是指针所以是(),()前面的int表示的是接受的返回值类型,而int(*)后面的(int,int)表示这个指针变量可以指向有两个参数且都是 int 型的函数,所以可以理解为该指针指向一个返回值是int型并且参数类型是两个int型的函数。   > 所以函数指针的定义方式为: 函数返回值类型 ( 指针变量名) (函数参数列表)   输出的都是Add的地址   
在这里插入图片描述   函数指针的简单使用   我们该如何使用这个指针呢?   
在这里插入图片描述   让我们来判断一下以下哪一个是函数指针   练习1   答案是B 第一三四并没有什么区别,带的括号并不影响优先级,都是返回值类型为int*的函数   练习2   定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?下面哪个是正确的?( )   答案是B 首先排除D选项,因为D的定义并不完整。题目中定义一个函数指针要求返回值是一个函数指针,那么排除B选项,返回的指针指向一个有一个int形参且返回int的函数,那么此时我们可以删除之前的函数名和参数列表 即:将int (*(F)(int, int))(int)删除后是int ()(int),所以答案是B   附加题   请思考一下这两段代码是什么意思?   注 :推荐《C陷阱和缺陷》   这本书中提及这两个代码。 附加题1   void ()()是一个函数指针类型   (void ()()) 将一个类型放在括号里面就是强制类型转换   (void ()())0的意思就是对0进行强制类型转换,将0强制类型转换成一个函数指针我们认为0地址处   放着一个返回类型为void参数类型为空的函数   ((void ()())0) 相当于对0地址处解应用访问void ()()这个函数   ((void ()())0)() 此时调用这个函数,传的参数为空 附加题2   signal(int, void()(int)) signal是函数名,和括号先结合,形成一个函数,signal的参数第一个是int类型,第二个参数是函数指针类型,   我们回顾一下函数指针的定义 函数返回值类型(指针变量名) (函数参数列表) 那么此时还缺少的是函数返回类型   void (signal(int, void()(int)))(int) 删去signal(int, void()(int)) 变为 void ()(int)   void ()(int)是什么?又是一个函数指针,说明它的返回值就是一个函数指针   所以signal是一个函数声明,其参数第一个是int类型的,第二个是void()(int)类型的   signal函数的返回值类型也是void(*)(int)类型的   函数指针数组   我们现在已经了解了什么是函数指针,那么函数指针数组也就容易理解很多了。   数组是一个存放相同类型数据的存储空间,我们学过很多数组:   函数指针数组的定义   那函数指针的数组如何定义呢?   答案是:parr1   parr1 先和 [] 结合,说明 parr1是数组,数组的内容是什么呢?   是 int (*)() 类型的函数指针。   在我们明白函数指针数组的定义及简单使用后,可能读者会有疑问,这个函数指针数组有什么用途呢?   函数指针数组的用途:简易计算器的实现   
在这里插入图片描述   
在这里插入图片描述   对于函数指针及函数指针数组的讲解到此解释,如有错误还请读者斧正!

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/55248.html

(0)
上一篇 2024年 9月 1日
下一篇 2024年 9月 1日

相关推荐

关注微信