文章目录

  • 20211126 这篇讲得好

参考文章1:C语言函数指针(指向函数的指针)详解

函数指针的定义形式:

returnType (*pointerName)(param list);

示例代码:

#include <stdio.h>//返回两个数中较大的一个
int max(int a, int b) {return a > b ? a : b;
}int main() {int x, y, maxval;//定义函数指针int (*pmax)(int, int) = max;  //也可以写作int (*pmax)(int a, int b) = maxprintf("Input two numbers:");scanf_s("%d %d", &x, &y);maxval = (*pmax)(x, y);printf("Max value: %d\n", maxval);return 0;
}

运行结果:

Input two numbers:1 2
Max value: 2

参考文章2:结构体中定义函数指针

c语言中,如何在结构体中实现函数的功能?把结构体做成和类相似,让他的内部有属性,也有方法,
这样的结构体一般称为协议类,提供参考:
struct { int funcid; char *funcname; int (*funcint)();   /* 函数指针 int 类型*/ void (*funcvoid)();  /* 函数指针 void类型*/
};
每次都需要初始化,比较麻烦
#include <stdio.h>  typedef struct
{  int a;  void (*pshow)(int);
}TMP;  void func(TMP *tmp)
{  if(tmp->a >10)//如果a>10,则执行回调函数。  {  (tmp->pshow)(tmp->a);  }
}  void show(int a)
{  printf("a的值是%d\n",a);
}  void main()
{TMP test;  test.a = 11;  test.pshow = show;  func(&test);
}
终端显示:a的值是11      /*一般回调函数的用法为:
甲方进行结构体的定义(成员中包括回调函数的指针) 乙方定义结构体变量,并向甲方注册,
甲方收集N个乙方的注册形成结构体链表,在某个特定时刻遍历链表,进行回调。
当函数指针做为函数的参数,传递给一个被调用函数,
被调用函数就可以通过这个指针调用外部的函数,这就形成了回调<p>一般的程序中回调函数作用不是非常明显,可以不使用这种形式</p><p>最主要的用途就是当函数不处在同一个文件当中,比如动态库,要调用其他程序中的函数就只有采用回调的形式,通过函数指针参数将外部函数地址传入来实现调用</p><p>函数的代码作了修改,也不必改动库的代码,就可以正常实现调用便于程序的维护和升级</p>*/

20211126 这篇讲得好

分析函数指针及其两个主要用途

C语言函数指针(结构体函数指针)相关推荐

  1. c语言定义指向结构体的指针,C语言入门教程-指向结构体的指针

    指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: typedef struct {char name[21];char ci ...

  2. 指针结构体函数-事实上能够这样具体理解

    今天一大早登了下QQ空间,看到本科的一个学弟发表一篇日志.写关于西电微软俱乐部面试题的解答,写的非常不 错. 我也一下子起兴了,由于我以前也是被指针困惑非常久.搞不清头绪,本科到研究生.我也笔试面试不 ...

  3. 常量 数组 函数 枚举 结构体与指针

    与指针括起来的是指针(*a) int const *a = &b; /* 常量指针 */ int (*a)[5]; /* 数组指针 */ int (*add)(int a, int b); / ...

  4. 关于sizeof函数、memcpy函数以及结构体关于指针的问题汇总

    1.sizeof()函数用于获取变量.类型等字节数.但是不能通过结构体指针获取结构体的字节数.使用会出现错误: 比如: typede struct {unsigned char yuliu[5];un ...

  5. Go语言的使用结构体、指针和方法

    结体体定义如下: type author struct{ field1 type1 field2 type2 ... } 结构体的定义格式如下: type 类型名 struct{ 字段1 字段1类型 ...

  6. C语言边角料:结构体中指针类型的成员变量,它的类型重要吗?

    一.前言 昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个 Warning! 本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型的指针成员变量导致的问题. 这个 ...

  7. C语言 字符串转结构体,字符串指针转化为结构体指针!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include struct abc { unsigned int num; char c; }; typedef abc* pabc ...

  8. C语言经典例71-编写函数输出结构体数据

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 编写input()和output()函数输入,输出5个学生的数据记录. 2 分析 定义结构体,声明结构体数组,再编写函数传入结构体数组指针到 ...

  9. c语言如何传递结构体指针,注意使用结构体指针给函数传递参数。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...

  10. C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)

    文章目录 C语言项目实战:24点游戏计算器(基于结构体.指针.函数.数组.循环等知识点) 前言:24点游戏计算器的规则如下 一.项目的创建标 1.选择项目 2.输入项目名称和路径 3.创建头文件Mai ...

最新文章

  1. textureview 旋转90度后平铺_轮滑知识 | 单排轮滑的旋转技巧
  2. 【Linux】/etc/sysconfig/i18n文件详解
  3. python元编程之使用动态属性实现定制类--特殊方法__setattr__,__getattribute__篇
  4. 2019年第十届蓝桥杯国赛B组试题A-平方序列-枚举
  5. 匿名内部类与Lambda表达式
  6. Sublime Text插件列表
  7. 为什么Nginx的性能要比Apache高得多?
  8. Flume Sink Processor
  9. Ubuntu Make新版上线:支持安装Swift编程语言
  10. linux终端输入lsblk无命令,lsblk
  11. python难学吗-Python入门很难吗? 为什么越来越多的人都学Python?
  12. 二维小游戏,飞机大战,图片素材
  13. 诺瓦-测试-面经(一面+二面)
  14. Excel生成随机数(函数RAND)
  15. 个人空间岁末大回报活动12月21日获奖名单
  16. 基础(四)之java后端根据经纬度获取地址
  17. Session 与SessionFactory
  18. 为什么要学C语言及C语言存在的意义,有人经常犹豫学不学C语言
  19. 计算机系统大作业-程序人生Hello‘s P2P
  20. 【笔试】操作系统知识点整理

热门文章

  1. Asp.net中基于Forms验证的角色验证授权[转]
  2. WINDOWS SERVER 2003从入门到精通之DHCP中继代理
  3. 教你获取WindowsNT的Admin权限的方法
  4. mysql传参数 和 区别_mybatis中#{}和${}传参方式的区别
  5. 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强
  6. ABAP知识:LIKE LINE OF 和LIKE TABLE OF
  7. 关于企业应用架构中前置机的作用
  8. ABAP 选择屏幕上添加按钮,按钮上添加文字和图片
  9. sap 预制凭证与暂存凭证的区别
  10. 新茶饮“降价内卷”的尽头,是供应链?