函数指针三种定义与使用方式
创作时间:
作者:
@小白创作中心
函数指针三种定义与使用方式
引用
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);
}
函数指针和指针函数的区别
- 函数指针是指向函数的指针;
- 指针函数是返回类型为指针的函数;
代码案例
对于函数指针作为函数参数的使用方法,可以参考以下文章:
热门推荐
成都上半年演出票房6.09亿元,演唱会城市争夺战“正酣”
藻类造影+稻米造血 武汉生物制造开启未来产业新图景
如何做到食物多样化
劳动法视角下的劳动者主动离职相关权益解析
《思考,快与慢》带给我18条心得
奶蓟草的功效与作用
蜂蜜大蒜的功效与作用
紫薯和红薯哪个更营养?一文读懂它们的营养差异
小白也能打造高性能电脑:从CPU到机箱的全面配置指南
飞蚊症:从成因到分类的全面解析
为什么得了“飞蚊症”,医生让我检查眼底?
“猫咪陪伴,晚年温馨时光”
山东又一古镇火了,景色不输台儿庄,被誉为山东第一府城,免门票
蓝牙耳机能k歌用吗(蓝牙耳机K歌效果怎么样?)
十年自媒体老司机揭秘:如何用'钩子思维'让每篇文章都成爆款
如何提高驾照考试的通过率?
“Z世代”爱逛美食博物馆:在舌尖上“考古”在地文化
大连旅游攻略:必游景点、美食与住宿全攻略
护眼必备!6大营养素助力视力保护
轻盈之选,营养满载——豆芽的营养价值与功效深度探索
打架立案后会有案底吗?处理期限是多久?
八年级物理《浮力》知识点总结——阿基米德原理、浮沉条件
《歇后语解析》123.贾宝玉结婚
中国古代疆域变迁简史:少数民族为中国开疆拓土做出了巨大贡献
琴叶榕照顾指南:让您的琴叶榕茁壮成长的秘诀
韩式特色拌饭:一道色香味俱全的美食
酒后驾车处罚扣分标准是什么?
骨质增生的治疗与生活方式调整:科学应对关节疼痛问题
竹子:自然界的绿色瑰宝与多功能禾木科植物
清朝政治动荡与社会变革:历史背景、制度缺陷与国际环境分析