C语言函数指针(结构体函数指针)
文章目录
- 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语言函数指针(结构体函数指针)相关推荐
- c语言定义指向结构体的指针,C语言入门教程-指向结构体的指针
指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型.创建结构体指针是极常见的.下面是一个例子: typedef struct {char name[21];char ci ...
- 指针结构体函数-事实上能够这样具体理解
今天一大早登了下QQ空间,看到本科的一个学弟发表一篇日志.写关于西电微软俱乐部面试题的解答,写的非常不 错. 我也一下子起兴了,由于我以前也是被指针困惑非常久.搞不清头绪,本科到研究生.我也笔试面试不 ...
- 常量 数组 函数 枚举 结构体与指针
与指针括起来的是指针(*a) int const *a = &b; /* 常量指针 */ int (*a)[5]; /* 数组指针 */ int (*add)(int a, int b); / ...
- 关于sizeof函数、memcpy函数以及结构体关于指针的问题汇总
1.sizeof()函数用于获取变量.类型等字节数.但是不能通过结构体指针获取结构体的字节数.使用会出现错误: 比如: typede struct {unsigned char yuliu[5];un ...
- Go语言的使用结构体、指针和方法
结体体定义如下: type author struct{ field1 type1 field2 type2 ... } 结构体的定义格式如下: type 类型名 struct{ 字段1 字段1类型 ...
- C语言边角料:结构体中指针类型的成员变量,它的类型重要吗?
一.前言 昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个 Warning! 本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型的指针成员变量导致的问题. 这个 ...
- C语言 字符串转结构体,字符串指针转化为结构体指针!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include struct abc { unsigned int num; char c; }; typedef abc* pabc ...
- C语言经典例71-编写函数输出结构体数据
目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 编写input()和output()函数输入,输出5个学生的数据记录. 2 分析 定义结构体,声明结构体数组,再编写函数传入结构体数组指针到 ...
- c语言如何传递结构体指针,注意使用结构体指针给函数传递参数。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 为了增加参数调用的灵活性,可以利用结构体指针传递多个不同的参数进入C语言函数体. 最著名的例子就是用Win32API HANDLE CreateThrea ...
- C语言项目实战:24点游戏计算器(基于结构体、指针、函数、数组、循环等知识点)
文章目录 C语言项目实战:24点游戏计算器(基于结构体.指针.函数.数组.循环等知识点) 前言:24点游戏计算器的规则如下 一.项目的创建标 1.选择项目 2.输入项目名称和路径 3.创建头文件Mai ...
最新文章
- textureview 旋转90度后平铺_轮滑知识 | 单排轮滑的旋转技巧
- 【Linux】/etc/sysconfig/i18n文件详解
- python元编程之使用动态属性实现定制类--特殊方法__setattr__,__getattribute__篇
- 2019年第十届蓝桥杯国赛B组试题A-平方序列-枚举
- 匿名内部类与Lambda表达式
- Sublime Text插件列表
- 为什么Nginx的性能要比Apache高得多?
- Flume Sink Processor
- Ubuntu Make新版上线:支持安装Swift编程语言
- linux终端输入lsblk无命令,lsblk
- python难学吗-Python入门很难吗? 为什么越来越多的人都学Python?
- 二维小游戏,飞机大战,图片素材
- 诺瓦-测试-面经(一面+二面)
- Excel生成随机数(函数RAND)
- 个人空间岁末大回报活动12月21日获奖名单
- 基础(四)之java后端根据经纬度获取地址
- Session 与SessionFactory
- 为什么要学C语言及C语言存在的意义,有人经常犹豫学不学C语言
- 计算机系统大作业-程序人生Hello‘s P2P
- 【笔试】操作系统知识点整理
热门文章
- Asp.net中基于Forms验证的角色验证授权[转]
- WINDOWS SERVER 2003从入门到精通之DHCP中继代理
- 教你获取WindowsNT的Admin权限的方法
- mysql传参数 和 区别_mybatis中#{}和${}传参方式的区别
- 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强
- ABAP知识:LIKE LINE OF 和LIKE TABLE OF
- 关于企业应用架构中前置机的作用
- ABAP 选择屏幕上添加按钮,按钮上添加文字和图片
- sap 预制凭证与暂存凭证的区别
- 新茶饮“降价内卷”的尽头,是供应链?