www.zhblog.net

函数指针

#include <stdio.h>

#include <string.h>



void cmp(void *s, void *t, int (*comp)(void *, void *));



void cmp2(void *days[], int (*comp)(void *, void *));



int main() {

    char *s = "mnc";

    char *t = "abc";

    cmp((void *) s, (void *) t, (int (*)(void *, void *)) strcmp);



    char *days[] = {

            "Feb", "Mary"    };

    cmp2((void **) days, (int (*)(void *, void *)) strcmp);

    return 0;

}



void cmp(void *s, void *t, int (*comp)(void *, void *)) {

    int result = (*comp)(s, t);

    printf("result: %d\n", result);

    if (result < 0) {

        printf("%s < %s\n", (char *) s, (char *) t);

    } else if (result == 0) {

        printf("%s = %s\n", (char *) s, (char *) t);

    } else if (result > 0) {

        printf("%s > %s\n", (char *) s, (char *) t);

    }

}



void cmp2(void *days[], int (*comp)(void *, void *)) {

    // 以数组的方式获取值

//    int result = (*comp)(days[0], days[1]);

    // 以指针的方式

    // days 是指针

    void **s = days;    // days代表首地址void*

    void **t = ++days;  // 下一个地址void*

    int result = (*comp)(*s, *t);

    printf("result: %d\n", result);

    if (result < 0) {

        printf("%s < %s\n", (char *) *s, (char *) *t);

    } else if (result == 0) {

        printf("%s = %s\n", (char *) *s, (char *) *t);

    } else if (result > 0) {

        printf("%s > %s\n", (char *) *s, (char *) *t);

    }

}


函数本身不是变量,但可以定义指向函数的指针。

void * 为通用指针类型,任何类型指针都可以与之转换。


要点:

1.函数指针的定义

2.与void *之间的转换

3.函数的强制转换

4.传递函数

5.函数指针如何调用函数

6.注意cmp2函数中指针方式的处理以及%s对应(char *) *s


 

 

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情