
目录函数指针创建使用声明简化typedef编辑函数指针数组转移表函数指针创建#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h int add(int x,int y) { return x y; } int main() { //创建函数指针 int (*p)(int, int) add; //或者int (*p)(int x, int y) add; return 0; }使用通过函数指针p调用这个函数#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h //写一个打印二维数组的函数 int add(int x,int y) { return x y; } int main() { //创建函数指针 int (*p)(int, int) add; //int (*p)(int, int) add;后面 add可以加 或不加 int ret (*p)(2, 3); //int ret p(2, 3);可以不写 * printf(%d\n, ret); return 0; }声明简化typedef像这种复杂的函数声明可以用typdef重新命名方便使用比如但如果是数组指针类型、函数指针类型就不一样因为这里的p是数组指针变量想重新命名这个数组指针类型就要改这个p变量函数指针变量也是改这个地方函数指针数组#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h //函数指针数组 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 main() { int(*pf[3])(int, int) { add,sub,mul }; for (int i 0; i 3; i) { printf(%d\n, pf[i](3,2)); } return 0; }只有当函数类型一样的时候才能用这个函数指针数组类型不同不能用理解函数指针是 int(*pf)(int, int)因为要函数指针数组所以让函数指针变量和数组相结合就是(* pf[3] )转移表函数指针数组用于转移表实现一个计算器用于整数的加、减、乘、除#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h //函数指针数组 void menu() { printf(1.add 2.sub 3.mul 4.div\n); printf(0.exit\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() { int input 0; int x 0; int y 0; int ret 0; int(*pf[5])(int, int) { 0,add,sub,mul,div }; do { menu(); printf(请输入你的选择); scanf(%d, input); if (input 1 input 4) { printf(请输入两个数); scanf(%d %d, x, y); ret pf[input](x, y); printf(%d\n, ret); } else if (input 0) { printf(exit); } else { printf(选择错误请重新选择\n); } } while (input); return 0; }