网站建设与管理方案的总结,怎样做网站链接,双城网站建设公司,杭州网站推广优化公司全部学习汇总#xff1a;GitHub - GreyZhang/c_basic: little bits of c. 前阵子似乎写了不少错代码#xff0c;因为对函数指针的理解还不够。今天晚上似乎总算是梳理出了一点眉目#xff0c;在先前自己写过的代码工程中做一下测试。 先前实现过一个归并排序算法#xff0c…全部学习汇总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;i9;i) { printf(%d,,test_array[i]); }
} 编译与运行结果如下 这次比上次的代码清爽的多而且编译一而没有任何警告灯扎眼的信息。