码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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]);

             }

    }

    编译与运行结果如下:

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

  • 相关阅读:
    正则表达式(Regular Expression)学习网址分享
    JS严格模式(精简分析,快速掌握)
    物联网开发笔记(16)- 使用Wokwi仿真micropython on ESP32开发板实现跑马灯(4个LED)
    uImage的制作工具mkimage详解(源码编译、使用方法、添加的头解析、uImage的制作)
    【大模型应用极简开发入门(1)】LLM概述:LLM在AI中所处位置、NLP技术的演变、Transformer与GPT、以及GPT模型文本生成逻辑
    小白月赛96
    idea显示git分支信息(GitToolBox插件)
    【软考:系统集成项目管理】之 项目采购管理
    使用CompletableFuture实现异步回调
    读书会丨如何才能不做情绪的人质?
  • 原文地址:https://blog.csdn.net/grey_csdn/article/details/133040752
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号