数组是一个存放相同类型数据的存储空间,比如整型指针数组:
int* arr[10];
// 数组的每个元素是 int*
函数指针数组:存放函数地址的数组。
定义方法:
int (*parr1[10])(int, int);
int (* )(int, int); // 参数为两个int,返回类型为int的函数指针类型。
理解:parr1 先和 [ ] 结合,说明 parr1 是数组,数组内容是 int (* )(int, int) 类型的函数指针。
简单应用:转移表
Example:
#include <stdio.h>
void menu()
{
printf("**********************\n");
printf("**** 1.add 2.sub ****\n");
printf("**** 3.mul 4.div ****\n");
printf("****** 0.exit *****\n");
printf("**********************\n");
}
int add(int x,int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
int mul(int x, int y)
{
return x * y;
}
int div(int x, int y)
{
return x / y;
}
int main()
{
menu();
int ret = 0;
int input = 0;
int x, y = 0;
int (*parr[5])(int, int) = { NULL,add,sub,mul,div }; // 函数指针数组的应用
do
{
printf("input: \n");
scanf_s("%d", &input); // scanf_s("%d ", &input),%d 后面不要加空格,会导致程序执行顺序出错
if (input > 0 && input <= 5)
{
printf("请输入两个整数:\n");
scanf_s("%d %d", &x, &y);
ret = (parr[input])(x, y);
printf("ret= %d \n", ret);
}
else if (input == 0)
{
printf("退出程序\n");
break;
}
else
{
printf("重新输入\n");
}
} while (input);
return 0;
}
scanf_s("%d", &input); // scanf_s("%d ", &input),%d 后面不要加空格,会导致程序执行顺序出错
指向函数指针数组的指针
指向函数指针数组的指针是一个指针,该指针指向一个数组,数组的元素是函数指针。
#include <stdio.h>
void test(const char* str)
{
printf("%s\n", str);
}
int main()
{
//函数指针 pfun
void (*pfun)(const char*) = test;
//函数指针的数组 pfunArr
void (*pfunArr[5])(const char* str);
pfunArr[0] = test;
//指向函数指针数组 pfunarr 的指针 ppfunarr
void (*(*ppfunarr)[10])(const char*) = &pfunArr;
return 0;
}