使用教材
《“笨办法” 学C语言(Learn C The Hard Way)》
https://www.jianshu.com/p/b0631208a794
-
完整源码 :
liblcthw
- 源文件路径
liblcthw/src/lcthw/darray_algos.c
liblcthw/src/lcthw/darray_algos.h
liblcthw/tests/darray_algos_tests.c
标准C库中的排序函数
- 快速排序
qsort
快速排序 qsort
void qsort( void *ptr, size_t count, size_t size, int (*comp)(const void *, const void *) );
ptr - 指向待排序的数组的指针
count - 数组的元素数目
size - 数组每个元素的字节大小
comp - 比较函数。若首个参数小于第二个,则返回负整数值,若首个参数大于第二个,则返回正整数值,若两参数相等,则返回零。
https://en.cppreference.com/w/c/algorithm/qsort
部分源码
- 取自
liblcthw/src/lcthw/darray_algos.h
typedef int (*DArray_compare) (const void *a, const void *b);
int DArray_qsort(DArray * array, DArray_compare cmp);
- 取自
liblcthw/src/lcthw/darray_algos.c
#include <lcthw/darray_algos.h>
#include <stdlib.h>
int DArray_qsort(DArray * array, DArray_compare cmp)
{
qsort(array->contents, DArray_count(array), sizeof(void *), cmp);
return 0;
}
- 取自
liblcthw/tests/darray_algos_tests.c
#include <lcthw/darray_algos.h>
int testcmp(char **a, char **b)
{
return strcmp(*a, *b);
}
char *run_sort_test(int (*func)(DArray *, DArray_compare), const char *name)
{
DArray *words = create_words();
mu_assert(!is_sorted(words), "words should start not sorted.");
debug("---- Testing %s sorting algorithm", name);
int rc = func(words, (DArray_compare)testcmp);
mu_assert(rc == 0, "sort failed");
mu_assert(is_sorted(words), "didn't sort it");
DArray_destroy(words);
return NULL;
}
char *test_qsort()
{
return run_sort_test(DArray_qsort, "qsort");
}
-
int rc = func(words, (DArray_compare)testcmp);
这里的DArray_compare来自darray_algos.h
的typedef int (*DArray_compare) (const void *a, const void *b);
,一个回调函数做了另一个回调函数的参数;
复习回顾
- 关于回调函数
- 理解
TYPE **a;
网友评论