函数指针三种定义与使用方式
创作时间:
作者:
@小白创作中心
函数指针三种定义与使用方式
引用
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);
}
函数指针和指针函数的区别
- 函数指针是指向函数的指针;
- 指针函数是返回类型为指针的函数;
代码案例
对于函数指针作为函数参数的使用方法,可以参考以下文章:
热门推荐
数据复盘:48股获主力资金净流入超亿元 龙虎榜机构抢筹12股
产品拉新方式有多少种?10种实用且常见的拉新推广方式介绍
脊柱侧弯常用的几种评估和治疗方法
江门人力资源实力怎么样
乔丹和皮蓬的球衣都被退役了,为何公牛三巨头之一的罗德曼没有?
浅谈浮游矶钓诱饵的作用与特性
法官说法 | 未经法庭允许录音录像,违法,不可取!
宝宝脸发黄肝功异常
流通股数应如何进行有效查找?这种查找方法有哪些实际应用?
电梯维保收费标准分为哪些?
桑葚酒怎么泡
Nat. Rev. Neurosci. 综述:大脑结构与功能,分离还是耦合?
掉期交易的原理是什么?这种交易方式在金融市场中的应用有哪些?
中国科学院研究者们揭示了阻断Apelin受体棕榈酰化可减轻神经性癌痛的吗啡耐受性
越南工业区:从发展机遇到未来趋势
椰子水减肥真的有用吗? 喝椰子水还能带来哪些健康益处
开塞露的副作用
2024中山民生答卷⑥|多重保障!市民有了稳稳的“医靠”
12种常见的产品盈利模式(超详细介绍)
家门口看病方便省钱!北京社区里的专病特色科室
保理业务基本概念
《原神》瓦雷莎全面培养攻略
《黑神话:悟空》游戏中的四妹,为何她的人气比悟空还要高?
三个M标志代表的是哪款车?
书法之美,你懂多少?初学者毛笔选购全攻略
同居期间的财产问题怎么解决
王者荣耀:普通梦奇玩家每天玩8小时游戏,能将战力打到17658分吗
揭秘土豆煮透的奥秘,时间、火候与完美口感的艺术
MPV是什么意思?一文读懂多用途汽车的世界
探秘草字头:含有草字头的汉字全解析