[示例代码] 函数指针的用法

[复制链接]
 楼主| zhuomuniao110 发表于 2023-3-21 22:03 | 显示全部楼层 |阅读模式
在单片机开发中,有时候需要调用不同的函数执行,这时候用函数指针非常好,另外函数指针可以用于回调函数。
函数指针是指向函数的指针变量。函数指针可以用于调用函数、作为参数传递给其他函数以及作为返回值返回给其他函数。函数指针可以大大增强程序的灵活性和可重用性。

函数指针的用法主要包括以下几个方面:

函数指针的定义:函数指针的定义和普通指针变量的定义类似,只不过需要指定函数的返回值类型和参数列表。例如,以下代码定义了一个指向函数的指针变量:

  1. int (*p)(int, int);  // 指向返回值为int,带两个int类型参数的函数的指针变量p
函数指针的赋值:函数指针可以像普通指针一样进行赋值。例如,以下代码将函数add赋值给函数指针p:
  1. int add(int a, int b) { return a + b; }
  2. int (*p)(int, int) = add;  // 将函数add赋值给函数指针p
函数指针的调用:函数指针可以像函数一样进行调用。例如,以下代码使用函数指针p调用函数add:
  1. int result = (*p)(1, 2);  // 调用函数add,并将返回值赋给result
函数指针作为参数传递:函数指针可以作为参数传递给其他函数,以实现函数回调的功能。例如,以下代码定义了一个函数calc,并将函数指针p作为参数传递给该函数:
  1. int calc(int a, int b, int (*p)(int, int)) {
  2.     return (*p)(a, b);
  3. }
  4. int result = calc(1, 2, add);  // 调用calc函数,并将add函数指针作为参数传递
函数指针作为返回值返回:函数指针也可以作为函数的返回值返回给其他函数。例如,以下代码定义了一个函数getFunc,返回一个指向函数的指针变量:
  1. int (*getFunc())(int, int) {
  2.     return add;
  3. }
  4. int (*p)(int, int) = getFunc();  // 调用getFunc函数,并将返回值赋给函数指针p
函数指针是C语言中的一种重要特性,它可以大大增强程序的灵活性和可重用性,但也需要注意函数指针的使用方法和注意事项。
小明的同学 发表于 2023-3-23 19:00 | 显示全部楼层
  1. #include <stdio.h>
  2. int (*p)(int, int);
  3. int add(int a, int b) { return a + b; }
  4. int mul(int a, int b) { return a * b; }
  5. int calc(int a, int b, int (*p)(int, int)) { return (*p)(a, b);}
  6. int main()
  7. {
  8.    /* 我的第一个 C 程序 */
  9.    printf("Hello, World! \n");
  10.         printf("5*3=%d\n",calc(5,3,mul));
  11.         printf("5+3=%d\n",calc(5,3,add));
  12.    
  13.    return 0;
  14. }
小明的同学 发表于 2023-3-23 19:01 | 显示全部楼层
试了一下,效果很奈斯。
Hello, World!
5*3=15
5+3=8
wowu 发表于 2023-4-13 17:31 | 显示全部楼层
我们常用的数组  是不是就是指针的一个形式啊
tpgf 发表于 2023-4-14 09:19 | 显示全部楼层
指针的用法是非常灵活的 也不容易掌握
xiaoqizi 发表于 2023-4-14 11:09 | 显示全部楼层
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针
木木guainv 发表于 2023-4-14 11:30 | 显示全部楼层
函数指针的定义就是将“函数声明”中的“函数名”改成“(*指针变量名)”
磨砂 发表于 2023-4-14 12:03 | 显示全部楼层
怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢
晓伍 发表于 2023-4-14 12:19 | 显示全部楼层
磨砂 发表于 2023-4-14 12:03
怎么判断一个指针变量是指向变量的指针变量还是指向函数的指针变量呢

首先看变量名前面有没有“*”,如果有“*”说明是指针变量;其次看变量名的后面有没有带有形参类型的圆括号,如果有就是指向函数的指针变量,即函数指针,如果没有就是指向变量的指针变量
小小蚂蚁举千斤 发表于 2023-5-21 20:06 | 显示全部楼层
函数指针有两个用途调用函数和做函数的参数
jtracy3 发表于 2023-6-7 21:25 | 显示全部楼层
函数指针怎么调用               
sesefadou 发表于 2023-6-10 10:00 | 显示全部楼层
如何通过函数指针调用函数              
pentruman 发表于 2023-6-10 10:29 | 显示全部楼层
利用函数指针来实现面向对象编程中的多态特性,使得不同类型的对象能够调用同一个函数接口。
xiaoyaodz 发表于 2023-6-10 10:35 | 显示全部楼层
函数指针的使用可以带来极大的灵活性和功能扩展能力,也是很多高级编程技巧的基础之一。
vivilyly 发表于 2023-6-10 10:41 | 显示全部楼层
函数指针怎么赋值?              
pentruman 发表于 2023-6-10 11:13 | 显示全部楼层
将一个函数指针作为参数传递给另一个函数,在合适的时候由该函数指针所指向的函数被调用,以完成特定的任务或处理特定的事件。
jimmhu 发表于 2023-6-10 11:43 | 显示全部楼层
怎样用函数指针做参数?              
sanfuzi 发表于 2023-6-10 11:49 | 显示全部楼层
如何使用函数指针指向几个函数              
minzisc 发表于 2023-6-10 12:16 | 显示全部楼层
函数指针有两个用途:调用函数和做函数的参数。
sdCAD 发表于 2023-6-10 13:05 | 显示全部楼层
如何使用指向类的成员函数的指针              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

232

主题

3495

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部