1.函数指针基本概念:
程序运行期间,每个函数都会占用一段连续的内存空间,而函数名就是该函数所占内存区域的起始地址,我们可以将函数的起始地址赋给一个指针变量,使该指针变量指向该函数,然后通过该指针变量便可以调用这个函数。这种指向函数的指针变量称为函数指针。
2.函数指针定义形式:
类型名(*指针变量名)(参数类型1, 参数类型2,...);
例如:
void (*pf)(int, char);
3.使用方法
只能用原型匹配函数的名字给一个函数指针赋值,例如:
#include <stdio.h>
void PrintMin(int a, int b){
if(a < b)
printf("%d", a);
esle
printf("%d", b);
}
int main(){
void (*pf)(int, int);
int x = 3, y = 4;
pf = PrintMin;
pf(x, y);
return 0;
}
4.用途
函数指针可以用于调用用户自己定义的函数来完成库函数的使用,例如qsort库函数。
qsort()的原型为:
void qsort(void* base, int nelen, unsigned int width, int (*pfCompare)(const void*, const void*));
举例对字符串长度从小到大进行排序:
#include <stdio.h>
#include <stdlib.h>
int compare(const void* str1, const void* str2){
char* s1 = (char*)str1;
char* s2 = (char*)str2;
int num1 = 0;
int num2 = 0;
while (*s1){
s1++;
num1++;
}
while (*s2){
s2++;
num2++;
}
//printf("%d,%d,%d\n", num1, num2, num1 - num2);
return num1 - num2;
}
int main(){
char str[3][10] = { "green", "yellow", "red" };
qsort(str, 3, 10, compare);
for (int i = 0; i < 3; i++)
printf("%s\n", str[i]);
return 0;
}
输出结果为: