一、概念
-
我们定义的函数,在运行程序的时候,会将函数的指令加载到内存的代码段。所以函数也有地址。
-
C语言规定,和数组一样,函数的名字也是函数的起始地址(入口地址)。这样一来,我们就可以定义一个函数指针变量,来存放函数的地址。
二、函数指针定义和使用
#include<stdio.h>
int max(int x, int y)
{
if (x>y)
{
return x;
}
return y;
}
int min(int x, int y)
{
if (x < y)
{
return x;
}
return y;
}
int main()
{
int num = max(10, 20);
printf("num = %d\n", num);
int(*p)(int, int);//定义函数指针
p = min;//指向min函数的入口
num = (*p)(10, 20);//通过函数指针调用函数
printf("num = %d", num);
return 0;
}
三、函数指针数组定义和使用
概念:由若干个相同类型和参数的函数指针构成的集合。
#include<stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int min(int x, int y)
{
return x < y ? x : y;
}
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mux(int x, int y)
{
return x * y;
}
int main()
{
int(*p[5])(int, int) = { max,min,add,sub,mux };
printf("max = %d\n", (*p[0])(10, 20));
printf("min = %d\n", (*p[1])(10, 20));
printf("add = %d\n", (*p[2])(10, 20));
printf("sub = %d\n", (*p[3])(10, 20));
printf("mux = %d\n", (*p[4])(10, 20));
return 0;
}
四、函数指针变量做函数的参数
#include<stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int min(int x, int y)
{
return x < y ? x : y;
}
int add(int x, int y)
{
return x + y;
}
int process(int(*p)(int, int), int x, int y)
{
return (*p)(x, y);
}
int main()
{
printf("max = %d\n", process(max, 10, 20));
printf("min = %d\n", process(min, 10, 20));
printf("add = %d\n", process(add, 10, 20));
return 0;
}