打印
[技术手册]

函数指针概念

[复制链接]
80|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AdaMaYun|  楼主 | 2024-4-7 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。

函数指针可以像一般函数一样,用于调用函数、传递参数。

函数指针的定义方式为:
函数返回值类型 (* 指针变量名) (函数参数列表);

“函数返回值类型”表示该指针变量可以指向具有什么返回值类型的函数;“函数参数列表”表示该指针变量可以指向具有什么参数列表的函数。这个参数列表中只需要写函数的参数类型即可。

我们看到,函数指针的定义就是将“函数声明”中的“函数名”改成“(指针变量名)”。但是这里需要注意的是:“(指针变量名)”两端的括号不能省略,括号改变了运算符的优先级。如果省略了括号,就不是定义函数指针而是一个函数声明了,即声明了一个返回值类型为指针型的函数。

那么怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢?首先看变量名前面有没有“”,如果有“”说明是指针变量;其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量。

最后需要注意的是,指向函数的指针变量没有 ++ 和 – 运算。
一般为了方便使用,我们会选择
typedef 函数返回值类型 (* 指针变量名) (函数参数列表);

比如
typedef int (*Fun1)(int);//声明也可写成int (*Fun1)(int x),但习惯上一般不这样。
typedef int (*Fun2)(int, int);//参数为两个整型,返回值为整型
typedef void (*Fun3)(void);//无参数和返回值
typedef void* (*Fun4)(void*);//参数和返回值都为void*指针


使用特权

评论回复
沙发
中国龙芯CDX| | 2024-4-10 10:55 | 只看该作者
函数指针是指向函数,其实最终都是指向一个地址

使用特权

评论回复
板凳
szt1993| | 2024-4-10 14:55 | 只看该作者
函数指针可以像一般函数一样,用于调用函数、传递参数。

使用特权

评论回复
地板
小夏天的大西瓜| | 2024-4-11 14:52 | 只看该作者
其实终归还是定义地址位置的各种手段罢了,按照C语言的规则进行编程

使用特权

评论回复
5
jf101| | 2024-4-14 14:37 | 只看该作者
函数指针可以像一般函数一样,用于调用函数

使用特权

评论回复
6
小小蚂蚁举千斤| | 2024-4-15 09:59 | 只看该作者
“函数返回值类型”表示该指针变量可以指向具有什么返回值类型的函数;“函数参数列表”表示该指针变量可以指向具有什么参数列表的函数。这个参数列表中只需要写函数的参数类型即可。

使用特权

评论回复
7
OKAKAKO| | 2024-4-19 18:44 | 只看该作者
指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。

使用特权

评论回复
8
星辰大海不退缩| | 2024-4-21 12:23 | 只看该作者
指向函数的指针变量没有 ++ 和 - - 运算

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1274

帖子

3

粉丝