今天来简单的了解一下函数指针,下面有俩个供调用的示例函数.
//处理int类型的数据
int intCompare(const void* key1, const void* key2) {//使用void*支持多种数据类型
const int *k1 = (const int*)key1;
const int *k2 = (const int*)key2;
//第一个减去第二个
return (*k1 - *k2);//k1,k均为指针,需解引得到整形数
}
//处理char类型的数据
int charCompare(const void* key1, const void* key2) {
//const char k1= *(const char*)key1;先解引
const char* k1 = (const char*)key1;
const char* k2 = (const char*)key2;
return (*k1 - *k2);//解引局部指针变量k1,k2
}
上面我们可以看到,这有俩个处理不同数据类型的函数,下面我来简单的说一下函数指针的定义以及调用方式:
int x = 0, y = 0;//给函数指针提供的实参变量,仅为调用示例需要,无实际意义
第一步,函数指针的定义,首先把函数声明移动过来,把函数名改成(*函数指针名),
int(*fp)(const void* key1,const void* key2);
第二步调用,这里有俩中方式可供使用
fp = &intCompare;
(*fp)(&x,&y);//方式1,按普通指针解引的方式进行调用,(*fp)等fp同于intCompare;
fp(&x,&y);//方式2,直接调用
//使用 qsort
对整形数组排序
int arr[]={2, 10, 30, 1, 11, 8, 7, 111, 520};
//在qsort排序函数中使用函数指针intCompare
qsort(arr, sizeof(arr)/sizeof(int), sizeof(int), &intCompare);
以上就是今天的分享了~