网站设计细节,北京aso优化,北京做网站公司哪家强,如何自己建立网站听说这是目录哦 函数指针数组#x1fae7;用途#xff1a;转移表 回调函数#x1fae7;能量站#x1f61a; 函数指针数组#x1fae7;
函数指针数组是存放函数地址的数组#xff0c;例如int (*parr[5])()中parr先和[]结合#xff0c;说明parr是可以存放5个函数地址【元… 听说这是目录哦 函数指针数组用途转移表 回调函数能量站 函数指针数组
函数指针数组是存放函数地址的数组例如int (*parr[5])()中parr先和[]结合说明parr是可以存放5个函数地址【元素】的数组每个元素都是int (*)()类型的函数指针。 关于函数指针的知识可以参考突破•指针三
用途转移表
可以简化代码。 例子计算器的一般实现。 化简前
#include stdio.h
int add(int a, int b)
{return a b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input 1;int ret 0;do{printf(*************************\n);printf( 1:add 2:sub \n);printf( 3:mul 4:div \n);printf( 0:exit \n);printf(*************************\n);printf(请选择);scanf(%d, input);switch (input){case 1:printf(输入操作数);//重复语句scanf(%d %d, x, y);//重复语句ret add(x, y);printf(ret %d\n, ret);//重复语句break;case 2:printf(输入操作数);scanf(%d %d, x, y);ret sub(x, y);printf(ret %d\n, ret);break;case 3:printf(输入操作数);scanf(%d %d, x, y);ret mul(x, y);printf(ret %d\n, ret);break;case 4:printf(输入操作数);scanf(%d %d, x, y);ret div(x, y);printf(ret %d\n, ret);break;case 0:printf(退出程序\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
}化简后
#include stdio.h
int add(int a, int b)
{return a b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
int main()
{int x, y;int input 1;int ret 0;//特地在最前面加一个NULL让输入的选项与数组下标对应int(*p[5])(int x, int y) { NULL, add, sub, mul, div }; //转移表do{printf(*************************\n);printf( 1:add 2:sub \n);printf( 3:mul 4:div \n);printf( 0:exit\n);printf(*************************\n);printf(请选择);scanf(%d, input);if ((input 4 input 1)){printf(输入操作数);scanf(%d %d, x, y);ret (*p[input])(x, y);printf(ret %d\n, ret);}else if (input 0){printf(退出计算器\n);}else{printf(输入有误\n);}} while (input);return 0;
}回调函数
回调函数就是一个通过函数指针调用的函数。 俄罗斯套娃被套着的那个娃就是回调函数。 例如下述代码中函数void calc(int(*pf)(int, int))的形参是函数指针用来接收回调函数add、sub、 mul、div的地址。
#include stdio.h
int add(int a, int b)
{return a b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}void calc(int(*pf)(int, int))
{int ret 0;int x, y;printf(输入操作数);scanf(%d %d, x, y);ret pf(x, y);printf(ret %d\n, ret);
}int main()
{int x, y;int input 1;int ret 0;do{printf(*************************\n);printf( 1:add 2:sub \n);printf( 3:mul 4:div \n);printf( 0:exit \n);printf(*************************\n);printf(请选择);scanf(%d, input);switch (input){case 1:calc(add);//使用回调函数的理念break;case 2:calc(sub);break;case 3:calc(mul);break;case 4:calc(div);break;case 0:printf(退出程序\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
}
能量站
在大多数领域天赋被高估了时间长了决心就是你的天赋。 ❤️❤️❤️ 恭喜! 恭喜! 闯关成功! ❤️❤️❤️