微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写

周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写

时间:07-30 来源:ZLG致远电子 点击:

定了,则称之为静态绑定;如果所有的变量和表达式的类型直到运行时才知道,则称之为动态绑定。

 

假设要实现一个用于任意数据类型的冒泡排序函数并简单测试,其要求是同一个函数既可以从大到小排列,也可以从小到大排列,且同时支持多种数据类型。比如:

int array[] = {39, 33, 18, 64, 73, 30, 49, 51, 81};

 

显然,只要将比较函数的入口地址compare_int传递给compare,即可调用bubbleSort():

int array[] = {39, 33, 18, 64, 73, 30, 49, 51, 81};

 

bubbleSort(array, numArray , sizeof(array[0]), compare_int);

在数量不大时,所有排序算法性能差别不大,因为高级算法只有在元素个数多于1000时,性能才出现显著提升。其实90%以上的情况下,我们存储的元素个数只有几十到几百个,冒泡排序可能是更好的选择,bubbleSort()的实现与使用范例程序详见程序清单 2.9。

 

程序清单 2.9 bubbleSort()冒泡排序范例程序

1     #include

2     #include

3     #include"bubbleSort.h"

4

5     int compare_int(const void * e1, const void * e2)

6     {

7            return *(int *)e1 - *(int *)e2; 

8     } 

9

10   int compare_int_r(const void * e1, const void * e2)

11   {

12          return  *(int *)e2 - *(int *)e1 ;

13   }

14

15   int compare_str(const void * e1, const void *e2)

16   {

17          return strcmp(*(char **)e1, *(char **)e2);

18   }

19

20   void main()

21   {

22          int arrayInt[] = { 39, 33, 18, 64, 73, 30, 49, 51, 81 };

23          int numArray = sizeof(arrayInt) / sizeof(arrayInt[0]); 

24          bubbleSort(arrayInt, numArray, sizeof(arrayInt[0]), compare_int); 

25          for (int i = 0; i

26                 printf("%d ", arrayInt[i]); 

27          }

28          printf("\n"); 

29

30          bubbleSort(arrayInt, numArray, sizeof(arrayInt[0]), compare_int_r); 

31          for (int i = 0; i

32                 printf("%d ", arrayInt[i]); 

33          }

34          printf("\n"); 

35

36          char * arrayStr[] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };

37          numArray = sizeof(arrayStr) / sizeof(arrayStr[0]); 

38          bubbleSort(arrayStr, numArray, sizeof(arrayStr[0]), compare_str); 

39          for (int i = 0; i < numArray; i++) { 

40                 printf("%s\n", arrayStr[i]);

41          }

42   }

 

 

由此可见,调用者main()与compare_int()回调函数都同属于上层模块,bubbleSort()属于下层模块。当上层模块调用下层模块bubbleSort()时,将回

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top