1. 函数指针
注:对于多个具有相同形参类型和返回值类型的函数,可用一个统一的函数去访问,这是函数指针的应用之一。类似于设计模式中的Facade模式!!!
例1 - 函数指针
#include <stdio.h>
int max(int x, int y)
{
return ( x>y ? x : y );
}
void main()
{
int (*pfunc) (int, int); //函数指针的声明
pfunc = max; //函数指针的初始化
printf("the maximum is: %d \n", max(10, 5));
printf("the maximum is: %d \n", pfunc(10, 5)); //函数指针的使用
printf("the maximum is: %d \n", (*pfunc)(10, 5)); //函数指针的使用
}
int max(int x, int y)
{
return ( x>y ? x : y );
}
void main()
{
int (*pfunc) (int, int); //函数指针的声明
pfunc = max; //函数指针的初始化
printf("the maximum is: %d \n", max(10, 5));
printf("the maximum is: %d \n", pfunc(10, 5)); //函数指针的使用
printf("the maximum is: %d \n", (*pfunc)(10, 5)); //函数指针的使用
}
例2 - 参数型函数指针(版本1)
#include <stdio.h>
int sub(int a, int b)
{
return a - b;
}
int add(int a, int b)
{
return a + b;
}
int calculate(int a, int b, int (*pfunc)(int, int))//参数型函数指针
{
return pfunc(a, b);
}
void main()
{
printf("10 sub 5 is: %d \n", calculate(10, 5, sub));
printf("10 add 5 is: %d \n", calculate(10, 5, add));
}
int sub(int a, int b)
{
return a - b;
}
int add(int a, int b)
{
return a + b;
}
int calculate(int a, int b, int (*pfunc)(int, int))//参数型函数指针
{
return pfunc(a, b);
}
void main()
{
printf("10 sub 5 is: %d \n", calculate(10, 5, sub));
printf("10 add 5 is: %d \n", calculate(10, 5, add));
}
例3 - 参数型函数指针(版本2)
#include <stdio.h>
int sub(int, int);
int add(int, int);
int calculate(int, int, int (*)(int, int)); //函数原型声明时不需变量名
void main()
{
printf("10 sub 5 is: %d \n", calculate(10, 5, sub));
printf("10 add 5 is: %d \n", calculate(10, 5, add));
}
int sub(int a, int b)
{
return a - b;
}
int add(int a, int b)
{
return a + b;
}
int calculate(int a, int b, int (*pfunc)(int, int))
{
return (*pfunc)(a, b);
}
int sub(int, int);
int add(int, int);
int calculate(int, int, int (*)(int, int)); //函数原型声明时不需变量名
void main()
{
printf("10 sub 5 is: %d \n", calculate(10, 5, sub));
printf("10 add 5 is: %d \n", calculate(10, 5, add));
}
int sub(int a, int b)
{
return a - b;
}
int add(int a, int b)
{
return a + b;
}
int calculate(int a, int b, int (*pfunc)(int, int))
{
return (*pfunc)(a, b);
}
2. 函数指针数组
函数还可以像其它整数一样,放在数组的连续内存中,通过索引来取值,这就是C语言中的“函数指针数组”
例4 - 函数指针数组
#include <stdio.h>
int sub(int, int);
int add(int, int);
int mul(int, int);
void main()
{
int (*pfunc[])(int, int) = { sub, add, mul}; //函数指针数组的声明与初始化
printf("10 sub 5 is: %d \n", pfunc[0](10, 5)); //调用相应函数
printf("10 add 5 is: %d \n", pfunc[1](10, 5)); //调用相应函数
printf("10 mul 5 is: %d \n", pfunc[2](10, 5)); //调用相应函数
}
int sub(int a, int b)
{
return a - b;
}
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int sub(int, int);
int add(int, int);
int mul(int, int);
void main()
{
int (*pfunc[])(int, int) = { sub, add, mul}; //函数指针数组的声明与初始化
printf("10 sub 5 is: %d \n", pfunc[0](10, 5)); //调用相应函数
printf("10 add 5 is: %d \n", pfunc[1](10, 5)); //调用相应函数
printf("10 mul 5 is: %d \n", pfunc[2](10, 5)); //调用相应函数
}
int sub(int a, int b)
{
return a - b;
}
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}

浙公网安备 33010602011771号