• 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]);

             }

    }

    编译与运行结果如下:

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

  • 相关阅读:
    经典算法系列之(三):七大查找——二分查找
    emqx安装教程
    对比Excel学openpyxl系列之单元格选择与字体设置
    WebRTC清晰度和流畅度
    PostgreSQL 查询修改max_connections(最大连接数)及其它配置
    python-爬虫-xpath方法-批量爬取王者皮肤图片
    一篇了解如何优雅地处理重复请求
    MySQL查询优化的实用技巧和案例分析
    IO子系统(一) — 块设备驱动程序
    Linux基础操作-篇二
  • 原文地址:https://blog.csdn.net/grey_csdn/article/details/133040752