1787_函数指针的使用

全部学习汇总:GitHub - GreyZhang/c_basic: little bits of c.

前阵子似乎写了不少错代码,因为对函数指针的理解还不够。今天晚上似乎总算是梳理出了一点眉目,在先前自己写过的代码工程中做一下测试。

先前实现过一个归并排序算法,算法函数的一个传入参数是指向一个比较功能函数的指针。当时进行代码实现的时候这部分有点糊涂,写了一段糊涂代码居然最后运行出了结果。今天在这基础上进行更新、提升与总结。

对于需要实现的功能,首先我需要一个比较函数,而根据比较函数的原型我可以抽象化出一个数据类型如下:

typedef int CMP_PROC_t(const void*,const void*);

为了实现函数指针同时简化代码,增强代码的可读性,我需要构造另外一个数据抽象,定义另一个数据类型如下:

typedef CMP_PROC_t *CMP_PROC_pt;

这样,我就可以直接通过CMP_PROC_pt数据类型定义或者声明一个指向比较函数的指针。如果我已经定义了一个比较函数如下:

int CompareIntFunc(void *address1,void *address2)

{

         int *address_var1 = NULL;

         int *address_var2 = NULL;

         int return_value = 0;

         address_var1 = address1;

         address_var2 = address2;

         if(*address_var1 == *address_var2)

         {

                   return_value =  0;

         }

         else

         {

                   return_value =  (*address_var1 > *address_var2) ? 1 : -1;

         }

         return return_value;

}

那么在使用归并排序函数之前,我可以先进行一个函数指针的定义,并且让此函数指针指向我需要的比较函数。假设需要排序的为整形数组,我可以定义函数指针如下:

int test_array[9] = {1,5,3,6,2,4,7,9,8}; //待排序数组

CMP_PROC_p_t p_CompareIntFunc = (CMP_PROC_p_t)&CompareIntFunc;

编写以下测试,实现相应功能的使用:

int main(void)

{

         int i = 0;

        

    mergesort(test_array,9,4,p_CompareIntFunc);

         for(i = 0;i<9;i++)

         {

                   printf("%d,",test_array[i]);

         }

}

编译与运行结果如下:

这次比上次的代码清爽的多,而且编译一而没有任何警告灯扎眼的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139600.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java毕设项目】基于SpringBoot+Vue校园便利平台的设计与实现

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

【LeetCode-中等题】513. 找树左下角的值

文章目录 题目方法一&#xff1a;前序递归方法二&#xff1a;层序遍历 题目 方法一&#xff1a;前序递归 在递归遍历到叶子结点时&#xff0c;对比此时的节点深度&#xff0c;若当前节点深度大于当前最大深度&#xff0c;就更新value值&#xff0c;最后记录下的value即为最下最…

2023.9.23(对这一年过去几个月的总结)

这个时间点杭州正在开亚运会&#xff0c;周六&#xff0c;大周&#xff0c;难得的大周&#xff0c;早上在公司健身房跑完步&#xff0c;就来工位看书了。 反思一下&#xff1a; 技术&#xff1a; 今年在技术学习上的目标&#xff0c;达成率是在太低&#xff0c;但看文章输出来…

手摸手图解 CodeWhisperer 的安装使用

CodeWhisperer 是亚⻢逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术&#xff0c;观点…

【云原生】Kubernetes学习笔记

部署 在部署前强调几点 不要使用IPv6, 很多组件都不支持IPv6不要使用最新版本, 最新版本非常不稳定, 甚至可能存在无法运行的bug不要版本更新, 安装后就将版本固定下来, 新的版本可能会引入新功能, 或移除旧功能, 导致Kubernetes无法运行 Kubeadm介绍 K8s是由多个模块构成的…

【Qt】16进制转换格式字符串及二进制

【Qt】16进制转换格式字符串及二进制 16进制转换成字符串16进制转换成格式字符串16进制转换成字符串并每两位加空格16进制转换成二进制 16进制转换成字符串 可调用QString类的静态方法number(),此方法为重载&#xff0c;有以下重载 // 第一个参数为输入值&#xff0c;第二个为…

《动手学深度学习 Pytorch版》 7.3 网络中的网络(NiN)

LeNet、AlexNet和VGG的设计模式都是先用卷积层与汇聚层提取特征&#xff0c;然后用全连接层对特征进行处理。 AlexNet和VGG对LeNet的改进主要在于扩大和加深这两个模块。网络中的网络&#xff08;NiN&#xff09;则是在每个像素的通道上分别使用多层感知机。 import torch fr…

Jetpack Compose干货,如何让Compose Dialog从屏幕任意方向进入

一、前言 来个效果图&#xff0c;基于Compose Dialog&#xff0c;最终要实现的库能力如下&#xff1a; 这里使用的是这个包下面的&#xff1a; androidx.compose.ui.window.Dialog androidx.compose.material3.AlertDialog它内部调用的也是androidx.compose.ui.window.Dialog …

eCognition易康操作教程(一):如何利用eCognition易康软件进行影像分割之棋盘分割、四叉树分割、光谱差异分割

一、新建工程 使用eCognition新建工程ImageSegmentation&#xff0c;加载影像数据&#xff0c;并编辑图层名称&#xff0c;将Layer 1、Layer 2、Layer 3、Layer 4的 Layer Alias 分别改为 Blue、Green、Red、如图1-1&#xff0c;图1-2所示&#xff1a; 图 1-1 图 1-2 设置加载…

CSDN博客去水印方法

直接在 创作中心->博客 设置这里关了好像就行了&#xff0c;之前方法是找图片链接?后面的一大串字符给去掉。

k8s 自动扩缩容HPA原理及adapter配置详解

大家好&#xff0c;我是蓝胖子&#xff0c;都知道&#xff0c;k8s拥有自动扩缩容机制HPA&#xff0c;我们能够通过配置针对不同的扩缩容场景进行自动扩缩容&#xff0c;往往初学者在面对其中繁多配置的时候会学了又忘记&#xff0c;今天我将会以一种不同的视角&#xff0c;结合…

【2023年研究生数学建模】E题代码与技术文档

2023年数学建模国赛C题 问题1.1Q1_1_judge.mQ1_1_time.m 问题1.2Q1_2_1.mQ1_2_BP.m 技术文档写在最后 目前已经完成E题的第一、二问的代码和文档&#xff0c;分享一部分给大家&#xff0c;欢迎一起来交流谈论哦。 问题1.1 Q1_1_judge.m clc clear dataxlsread(a表.xlsx); for…

七天学会C语言-第六天(指针)

1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量&#xff0c;它们有一些重要的区别和联系。 普通变量是一种存储数据的容器&#xff0c;可以直接存储和访问数据的值。&#xff1a; int num 10; // 定义一个整数型普通变量num&#xff0c;赋值为10在例…

HTTP 协商缓存 ETag、If-None-Match

&#xff08;1&#xff09;浏览器第一次跟服务器请求一个资源&#xff0c;服务器在返回这个资源的同时&#xff0c;在respone header加上ETag。 ETag是服务器根据当前请求的资源生成的一个唯一标识。 这个唯一标识是一个字符串&#xff0c;只要资源有变化这个串就不同&#xff…

一文带你实现从PDF到Word文件的相互转换

一文带你实现从PDF到Word文件的相互转换 01. 前期准备 模块安装 pip install pdf2docx or使用国内镜像源进行安装&#xff08;清华的镜像源&#xff09; pip install pdf2docx -i https://pypi.tuna.tsinghua.edu.cn/simple 02. 模块介绍 pdf2docx是一个Python模块&#xff0…

荣湃隔离放大器Pai8300 5.0kVRMS完美代替TI AMC1301

深力科推出了用于电流检测的隔离放大器Pai8300&#xff0c;实现对电流快速、精确的检测。Pai8300采用全新架构&#xff0c;叠加荣湃专利智能分压技术&#xff0c;保证低功耗&#xff0c;高精度和良好的隔离性能&#xff0c;广泛应用于电机驱动&#xff0c;逆变器&#xff0c;变…

Intel酷睿和AMD锐龙

Intel酷睿系列&#xff0c;主要分i3、i5、i7、i9 如&#xff1a;Intel 酷睿i5 10210U i5&#xff1a;品牌修饰符。 10&#xff1a;代次指示符。 210&#xff1a;sku编号。 常见后缀&#xff1a; G1-G7&#xff1a;集显等级。 U&#xff1a;低功耗。 H&#xff1a;标压版…

AI创作工具-AI创作工具技术解读

创作是广告、文章、小说、社交媒体内容等各个领域的关键&#xff0c;但它通常需要创作者花费大量时间和精力&#xff0c;思考、编写和编辑内容。有时候&#xff0c;创作者可能面临写作灵感枯竭、时间紧迫或需要大量内容的情况。 添加图片注释&#xff0c;不超过 140 字&#xf…

2023华为杯数学建模研赛E题全解析

2023华为杯数学建模研赛E题解析&#xff0c;完整版已出!!! 包含所有模型、代码、结果&#xff0c;39页技术文档&#xff0c;详细内容如下! 免费版链接已放在下面&#xff0c;需要的同学可以直接自取~ 【云顶数模】2023研究生数学建模免费链接&#xff1a; https://pan.baid…

Java反序列化和php反序列化的区别

文章目录 PHP反序列化漏洞反序列化漏洞什么是反序列化漏洞&#xff1f;修改序列化后的数据&#xff0c;目的是什么&#xff1f; Java反序列化漏洞反序列化漏洞 PHP反序列化漏洞 序列化存在的意义是为了传输数据/对象&#xff0c;类是无法直接进行传输的。通过序列化后转换为字…