函数指针三种定义与使用方式
创作时间:
作者:
@小白创作中心
函数指针三种定义与使用方式
引用
CSDN
1.
https://blog.csdn.net/weixin_45525272/article/details/118711459
函数指针是C语言中的一个重要概念,它允许我们将函数的入口地址存储在变量中,从而实现动态调用函数的功能。本文将详细介绍函数指针的三种定义方式,并通过具体的代码示例帮助读者理解其使用方法。
函数类型剖析
通过什么来区分两个不同的函数?
一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针,函数名代表函数的入口地址。
函数三要素: 名称、参数、返回值。(C 语言中的函数有自己特定的类型)
c 语言中通过 typedef 为函数类型重命名:
// f 为函数类型
typedef int f(int, int);
// p 为函数类型
typedef void p(int);
这一点和数组一样,因此我们可以用一个指针变量来存放这个入口地址,然后通过该指针变量调用函数。
注意:通过函数类型定义的变量是不能够直接执行,因为没有函数体。只能
通过类型定义一个函数指针指向某一个具体函数,才能调用。
typedef void(p)(int, int);
void my_func(int a, int b)
{
printf("%d %d\n", a, b);
}
void test()
{
p p1;
//p1(10,20); //错误,不能直接调用,只描述了函数类型,但是并没有定义函数体,没有函数体无法调用
p* p2 = my_func;
p2(10, 20); //正确,指向有函数体的函数入口地址
}
函数指针(指向函数的指针)
函数指针定义方式有三种:
- 先定义函数类型,通过类型定义指针
- 先定义函数指针类型,根据类型定义指针变量
- 直接定义函数指针变量
函数指针三种定义方式
假设我们有以下函数:
int my_func(int a, int b) {
printf("ret:%d\n", a + b);
return 0;
}
接下来,我们分别介绍三种定义函数指针的方式:
//1. 先定义函数类型,通过类型定义指针
void test01() {
typedef int(FUNC_TYPE)(int, int);
FUNC_TYPE* f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//2. 定义函数指针类型
void test02() {
typedef int(*FUNC_POINTER)(int, int);
FUNC_POINTER f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//3. 直接定义函数指针变量
void test03() {
int(*f)(int, int) = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
函数指针和指针函数的区别
- 函数指针是指向函数的指针;
- 指针函数是返回类型为指针的函数;
代码案例
对于函数指针作为函数参数的使用方法,可以参考以下文章:
热门推荐
卡耐基沟通技巧:职场人必备的人际交往艺术
通明湖公园启动大规模绿化升级 打造公园城市典范
戴尔·卡耐基教你如何赢得朋友
广西柳州:新柳邕市场如何确保蔬菜安全
春季十大蔬菜的最佳食用方法,你都知道吗?
2024最新蔬菜安全指南:避开农药残留,教你安全食用
让文字活起来:散文写作中的修辞技巧
魏佳艺《杯杯敬自己》:用歌声诠释失恋后的自我成长
皱纹的成因及解决方法!快速消除法令纹、虎纹、眼纹、颈纹、额头纹和鱼尾纹!
化妆品原料|抗衰界的两个“扛把子”
北京养月季难?这份实用养护指南请收好
中国科学院院士王建安:心血管疾病患者的“三低”饮食管理指南
王者荣耀5V5模式攻略:五大位置配合与实战技巧
心电图T波改变:可能暗藏风险,及时就医是关键
科学护理怀孕犬:健康监测与分娩准备全指南
孕期狗狗营养与护理全攻略:专业宠物平台e宠商城指南
从饮食到护理:孕期狗狗的全方位照顾指南
羽毛球拍拉线教程,让你秒变高手
新疆奶香黑椰枣:养生界的网红新宠
协和医院研究证实:NMN可改善卵巢功能,或为女性健康带来新希望
中科院团队创新生物合成技术,NMN产量大幅提升至3000μM
1000元玩转贵州6天,海南旅游套餐低至2000元起
食品合规管理体系:企业应对食安法挑战的新利器
药品溯源码怎么查?官方平台、二维码等5种查询渠道详解
新手必看:美国卡车模拟从入门到盈利
美国卡车模拟更新圣诞活动,五大仓库配送任务上线
久治不愈的植物神经紊乱,服用“黛力新”效果如何?
身份证扫描件是什么,要怎么弄
2025新年祝福语集锦:传统与创意的完美融合
宋朝新年诗词里的美好祝愿,为你的拜年增添诗意