周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写
与函数调用相关联的行为称为动态绑定,因此将一个函数的绑定发生在运行时而非编译期,就称该函数是多态的。显然,多态是一种运行时绑定机制,其目的是将函数名绑定到函数的实现代码。一个函数的名字与其入口地址是紧密相连的,入口地址是该函数在内存中的起始地址,因此多态就是将函数名动态地绑定到函数入口地址的运行时绑定机制,bubbleSort()的接口与实现详见程序清单 2.7和程序清单 2.8。
程序清单 2.7 bubbleSort()接口(bubbleSort.h)
1 #pragma once
2 #include
3
4 typedef int(*COMPARE)(const void * e1, const void *e2);
5 void bubbleSort(void * base, size_t nmemb, size_t size, COMPARE compare);
程序清单 2.8 bubbleSort()接口的实现(bubbleSort.c)
1 #include"bubbleSort.h"
2
3 void byte_swap(void *pData1, void *pData2, size_t stSize)
4 {
5 unsigned char *pcData1 = pData1;
6 unsigned char *pcData2 = pData2;
7 unsigned char ucTemp;
8
9 while (stSize--){
10 ucTemp = *pcData1; *pcData1 = *pcData2; *pcData2 = ucTemp;
11 pcData1++; pcData2++;
12 }
13 }
14
15 void bubbleSort(void * base, size_t nmemb, size_t size, COMPARE compare)
16 {
17 int hasSwap=1;
18
19 for (size_t i = 1; hasSwap&&i < nmemb; i++) {
20 hasSwap = 0;
21 for (size_t j = 0; j < numData - 1; j++) {
22 void *pThis = ((unsigned char *)base) + size*j;
23 void *pNext = ((unsigned char *)base) + size*(j+1);
24 if (compare(pThis, pNext) > 0) {
25 hasSwap = 1;
26 byte_swap(pThis, pNext, size);
27 }
28 }
29 }
30 }
静态类型和动态类型
类型的静态和动态指的是名字与类型绑定的时间,如果所有的变量和表达式的类型在编译时就固
- 电源软启动的实用设计技巧(07-16)
- 周立功:动态分布内存——malloc()函数与calloc()函数(07-22)
- 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数(07-25)
- 周立功教你学C语言编程:教你数组是如何保存指针的(07-31)
- 算法的泛化问题,这些坑你可能都经历过!|周立功教你学软件设计(08-01)
- 所有C语言数组和指针的知识都在这里了!|周立功手把手教你学C语言编程(08-01)
