0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

函数指针的五大作用

撞上电子 2023-12-06 08:00 次阅读

1,回调函数机制

函数指针常用于实现回调函数。通过将函数指针作为参数传递给另一个函数,可以在特定事件发生时调用预定义的函数。这种机制在事件处理、异步编程等场景中很常见。例如,图形用户界面(GUI)库中的按钮点击事件处理函数就是通过回调函数实现的。

#include
// 回调函数类型typedef void (*CallbackFunction)(int);
// 执行回调函数的函数void performCallback(CallbackFunction callback, int value) { callback(value);}// 回调函数1void callback1(int value) { printf("Callback 1: %d\n", value);}
// 回调函数2void callback2(int value) { printf("Callback 2: %d\n", value * 2);}
int main() { // 使用回调函数1 performCallback(callback1, 5);
// 使用回调函数2 performCallback(callback2, 10);
return 0;}

2,动态函数调用

函数指针允许在运行时动态地选择要调用的函数。这在需要根据条件选择不同实现的情况下很有用,可以增加程序的灵活性和可扩展性。例如,可以根据用户输入的选项调用不同的处理函数。

#include
// 函数类型typedef void (*FunctionPointer)();// 函数1void function1() { printf("Function 1\n");}// 函数2void function2() { printf("Function 2\n");}
int main() { // 函数指针 FunctionPointer funcPtr; // 根据条件选择要调用的函数 if (condition) { funcPtr = function1; } else { funcPtr = function2; } // 调用选择的函数 funcPtr();
return 0;}

3,函数指针数组

可以创建一个函数指针数组,每个元素是一个指向特定函数的指针。这样的数组可以用于实现状态机、菜单驱动程序等。例如,可以用一个函数指针数组来实现一个简单的命令行菜单系统。

#include
// 函数类型typedef void (*MenuFunction)();
// 函数1void function1() { printf("Option 1\n");}// 函数2void function2() { printf("Option 2\n");}
int main() { // 函数指针数组 MenuFunction menu[] = {function1, function2};
// 用户选择的菜单项 int choice; // 获取用户输入 printf("Enter your choice (1 or 2): "); scanf("%d", &choice);

// 调用选择的函数 if (choice >= 1 && choice <= 2) { menu[choice - 1](); // 数组索引从0开始,需要减1 } else { printf("Invalid choice\n"); }
return 0;}

4,动态库加载

在动态库加载的情景中,函数指针用于获取动态库中的函数地址。这样,你可以在运行时决定是否加载某个库,以及调用库中的哪些函数。

#include #include
typedef void (*LibraryFunction)();
int main() { // 加载动态库 void *libHandle = dlopen("mylibrary.so", RTLD_LAZY);
if (libHandle) { // 获取动态库中的函数地址 LibraryFunction libFunction = dlsym(libHandle, "myFunction");
if (libFunction) { // 调用动态库中的函数 libFunction(); } else { fprintf(stderr, "Error: Function not found\n"); } // 关闭动态库 dlclose(libHandle); } else { fprintf(stderr, "Error: Unable to load library\n"); }
return 0;}

5,函数指针作为参数函数指针可以作为函数的参数,这样可以将函数作为另一个函数的参数传递,实现更灵活的函数组合。

#include // 函数类型typedefint(*OperationFunction)(int,int);
// 加法函数int add(int a, int b) { return a + b;}// 减法函数int subtract(int a, int b) { return a - b;}// 执行操作的函数int performOperation(OperationFunction operation, int a, int b) { return operation(a, b);}
int main() { // 使用加法函数 int resultAdd = performOperation(add, 5, 3); printf("Result of addition: %d\n", resultAdd);
// 使用减法函数 int resultSubtract = performOperation(subtract, 5, 3); printf("Result of subtraction: %d\n", resultSubtract);
return 0;}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3441

    浏览量

    92407
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • 函数指针
    +关注

    关注

    2

    文章

    53

    浏览量

    3737
收藏 人收藏

    评论

    相关推荐

    C语言函数指针六大应用场景详解

    函数指针是一种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。在本文中,我们将介绍 6 个函数指针的高级应用场景,并贴出相应的代码案例和解释。
    的头像 发表于 04-23 18:19 421次阅读

    pcb等离子处理的5大作用

    pcb等离子处理的5大作用
    的头像 发表于 03-05 10:24 149次阅读

    函数指针指针函数是不是一个东西?

    函数指针的本质是指针,就跟整型指针、字符指针一样,函数指针
    的头像 发表于 01-03 16:35 266次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>和<b class='flag-5'>指针</b><b class='flag-5'>函数</b>是不是一个东西?

    函数指针的基本概念和语法

    函数指针是一种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。在本文中,我们将介绍 8 个函数指针的高级应用场景,并贴出相应的代码案例和解释。
    的头像 发表于 12-12 09:33 259次阅读

    了解一下函数指针的概念和使用方法

    在讲回调函数之前,我们需要了解函数指针
    的头像 发表于 11-06 10:04 313次阅读
    了解一下<b class='flag-5'>函数</b><b class='flag-5'>指针</b>的概念和使用方法

    堆栈指针作用是什么?

    堆栈指针作用是什么
    发表于 11-02 08:10

    常见的一级指针参数有什么作用

    先来看一个最常用函数模型,函数func()参数为一个uint8_t 的指针类型,那这个函数有什么作用
    的头像 发表于 10-24 14:35 300次阅读
    常见的一级<b class='flag-5'>指针</b>参数有什么<b class='flag-5'>作用</b>

    函数类型和函数指针类型的区别

    平时用的更多的是函数指针类型,比如作为函数参数传入回调函数等等。实际上函数类型也是可以作为函数
    发表于 10-24 14:27 150次阅读

    Linux内核如何使用结构体和函数指针

    我将结合具体的Linux内核驱动框架代码来展示Linux内核如何使用结构体和函数指针
    的头像 发表于 09-06 14:17 570次阅读
    Linux内核如何使用结构体和<b class='flag-5'>函数</b><b class='flag-5'>指针</b>?

    通过函数指针调用函数,需不需要加星号?

    先来说下结论,不管是获取函数地址,还是通过函数指针调用函数,两种写法都可以,就用法上来说,没有什么区别,初学者也不必过多纠结。
    的头像 发表于 09-05 17:05 695次阅读

    一文详解函数指针与回调函数

    函数指针是指向函数指针变量。它允许我们将函数作为参数传递给其他函数或将
    发表于 08-22 10:36 191次阅读

    C语言中指针函数函数指针的概念及应用示例

    在C语言中,指针函数函数指针是强大且常用的工具。它们允许我们以更灵活的方式处理函数和数据,进而扩展程序的功能。
    发表于 08-16 16:14 344次阅读

    函数指针有啥用?有啥意义?

    说来奇怪,昨晚睡觉前,突然在想一个问题:函数指针有啥用?有啥意义?
    发表于 08-04 11:12 304次阅读
    <b class='flag-5'>函数</b><b class='flag-5'>指针</b>有啥用?有啥意义?

    函数指针的基本概念和语法

    函数指针是一种非常强大的编程工具,它可以让我们以更加灵活的方式编写程序。在本文中,我们将介绍 6 个函数指针的高级应用场景,并贴出相应的代码案例和解
    的头像 发表于 07-05 10:32 396次阅读

    C语言进阶:函数指针的概念和使用方法

    函数指针是指向函数指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数
    发表于 05-02 06:17 5060次阅读