C高级编程 第十天(函数指针 回调函数)

2024-08-28 05:44

本文主要是介绍C高级编程 第十天(函数指针 回调函数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.函数指针

①先定义函数类型,再通过类型定义函数指针变量

②先定义函数指针的类型,再通过类型定义函数指针变量

③直接定义函数指针变量(重点)

2.回调函数

案例一:打印任意类型数据

案例二:打印任意类型数组

案例三:查找数组中的元素


1.函数指针

void func(int a, char b)
{printf("hello world");
}

①先定义函数类型,再通过类型定义函数指针变量

void test1()
{typedef void(FUNC_TYPE)(int, char);FUNC_TYPE* pFunc = func;pFunc(10, 'a');
}

②先定义函数指针的类型,再通过类型定义函数指针变量

void test2()
{typedef void(*FUNC_TYPE)(int, char);FUNC_TYPE pFunc = func;pFunc(20, 'b');
}

③直接定义函数指针变量(重点)

void test3()
{void(*p)(int, char) = func;p(30, 'c');
}

2.回调函数

案例一:打印任意类型数据

void myPrint(void* data,void(*mp)(void*))
{mp(data);
}struct Person
{int age;char name[64];
};void printInt(void* data)
{int* number = (int*)data;printf("%d\n", *number);
}void printDouble(void* data)
{double* number = (double*)data;printf("%f\n", *number);
}void printPerson(void* data)
{struct Person* number = (struct Person*)data;printf("姓名:%s,年龄:%d\n", number->name,number->age);
}int main()
{int a = 8;double b = 3.14;struct Person p = { 18,"ZJX"};myPrint(&a,printInt);myPrint(&b,printDouble);myPrint(&p,printPerson);return 1;
}

案例二:打印任意类型数组

void myPrint(void* data, void(*mp)(void*))
{mp(data);
}struct Person
{int age;char name[64];
};void printIntArr(void* data)
{int* number = (int*)data;for (int i = 0; i < 5; i++){printf("%d\n", number[i]);}
}void printDoubleArr(void* data)
{double* number = (double*)data;for (int i = 0; i < 5; i++){printf("%f\n", number[i]);}
}void printPersonArr(void* data)
{struct Person* number = (struct Person*)data;for (int i = 0; i < 5; i++){printf("姓名:%s,年龄:%d\n", number[i].name, number[i].age);}
}int main()
{int a[5] = {6,8,6,8,6};double b[5] = { 6.6,8.8,6.6,8.8,6.6 };struct Person p[5] ={{ 18,"ZJX" },{ 18,"ZZZ" },{ 18,"JJJ" },{ 18,"XXX" },{ 18,"XJZ" }};myPrint(&a, printIntArr);myPrint(&b, printDoubleArr);myPrint(&p, printPersonArr);return 1;
}

案例三:查找数组中的元素

int findArrayEle(void* array, int eleSize, int len, void* data,int(*compare)(void*,void*))
{char* arr = (char*)array;for (int i = 0; i < len; i++){char* arr1 = arr + eleSize * i;//数组中每个元素的首地址if (1 == compare(arr1, data)){return 1;}}return 0;
}struct Person
{int age;char name[64];
};int compare(void* a, void* b)
{struct Person* a1 = (struct Person*)a;struct Person* b1 = (struct Person*)b;if (strcmp(a1->age, b1->age) == 0 && strcmp(a1->name , b1->name)==0){return 1;}return 0;
}int main()
{struct Person p[5] ={{ 18,"ZJX" },{ 18,"ZZZ" },{ 18,"JJJ" },{ 18,"XXX" },{ 18,"XJZ" }};struct Person pFind = { 18,"XJZ" };int result=findArrayEle(p, sizeof(struct Person), sizeof(p) / sizeof(struct Person), &pFind,compare);
}

这篇关于C高级编程 第十天(函数指针 回调函数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1113892

相关文章

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数

python中update()函数的用法和一些例子

《python中update()函数的用法和一些例子》update()方法是字典对象的方法,用于将一个字典中的键值对更新到另一个字典中,:本文主要介绍python中update()函数的用法和一些... 目录前言用法注意事项示例示例 1: 使用另一个字典来更新示例 2: 使用可迭代对象来更新示例 3: 使用