- 论坛徽章:
- 0
|
- // -- 这里定义了一个新的数据类型 -- 函数指针类型,这个类型的函数具有两个const void*类型的参数。
- // -- 我再强调一遍,这里定义的十一个数据类型,你可以把它看作和int/double/char等等类似的数据类型。
- typedef int (*compare)(const void *x, const void *y);
- // -- 这里是一个函数的定义,他的名字my_compare,注意这里是名字不是类型!
- int my_compare(const void *x, const void *y){
- const int *a=(int *)x;
- const int *b=(int *)y;
- if(*a>*b)
- return 1;
- if(*a==*b)
- return 0;
- return -1;
- }
- // -- my_sort这个函数你的定义是错误的,你明白么?正确的写法如下
- // void my_sort(void *data, int length, int size, compare compareFunc)
- // 另外,把你这个函数内对compare的调用一律替换为comapreFunc
- // -- 你没有理解typedef的含义,也就无法理解这个函数的错误所在
- void my_sort(void *data, int length, int size, compare){
- char *d1,*d2;
- //do something
- if(compare(d1,d2)<0){
- //do something
- }else if(compare(d1,d2)==0){
- //do something
- }
- else{
- //do something
- }
- //do something
- }
- int main(int argc, char **argv){
- int arr={2,4,3,656,23};
- // 你这里对函数的使用,传递进去的恰恰就是my_compare这个函数的地址,也就是说传递了一个compare类型的函数地址给my_sort函数
- my_sort(arr, 5, sizeof(int), my_compare);
- //do something
- return 0;
- }
复制代码 不知到我上面的解释你明白了么?让你看typedef,你最好弄明白这个操作符的意思再继续。
1: typedef我知道,但这个compare写在这里是不是多余?我觉得用my_compare直接调用不就行了
2 ...
nanjingnew4 发表于 2011-11-19 12:37 ![]() |
|