#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