|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int add(int, int);
int sub(int, int);
int calc(int (*fp)(int, int), int, int);
int (*select(char op))(int, int);
int add(int num1, int num2)
{
return num1 + num2;
}
int sub(int num1, int num2)
{
return num1 - num2;
}
int calc(int (*fp)(int, int), int num1, int num2)
{
return (*fp)(num1, num2);
}
int (*select(char op))(int, int)
{
switch(op)
{
case '+': return add;
case '-': return sub;
}
}
int main()
{
int num1, num2;
char op;
int (*fp)(int, int);
printf("请输入一个式子(如:1+2):");
scanf("%d%c%d", &num1, &op, &num2);
fp = select(op);// 想问一下,不是说函数名字就是地址吗?前面小甲鱼讲函数指针的时候就是直接将函数名字赋给指针变量的(对应课程p30 13:48处,fp=square),按照前面讲的规则,不是应该fp=select吗?为什么这里要带上(op)呀(我试过去掉(op),程序无法正常运行,但是想问一下大家这是为啥?)
printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
return 0;
}
- #include <stdio.h>
- int add(int, int);
- int sub(int, int);
- int calc(int (*fp)(int, int), int, int);
- int (*select(char op))(int, int);
- int add(int num1, int num2)
- {
- return num1 + num2;
- }
- int sub(int num1, int num2)
- {
- return num1 - num2;
- }
- int calc(int (*fp)(int, int), int num1, int num2)
- {
- return (*fp)(num1, num2);
- }
- int (*select(char op))(int, int)
- {
- switch(op)
- {
- case '+': return add;
- case '-': return sub;
- }
- }
- int main()
- {
- int num1, num2;
- char op;
- int (*fp)(int, int); // 这个是要select函数的返回值
- int (*(*fps)(char op))(int num1, int num2); // 这个才是要select函数的地址
- printf("请输入一个式子(如:1+2):");
- scanf("%d%c%d", &num1, &op, &num2);
- fp = select(op);
- printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
- // 这可能是你想要的那种情况
- fps = select; // 先把select函数的地址给fps变量
- fp = fps(op); // 用fps这个变量来调用select函数,参数是上面输入的op变量,调用fps函数得到的返回值给fp变量
- printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
- // select函数的返回值要么是add函数的地址,要么是sub函数的地址
- // 像下面这样
- // 不过这是直接在代码里面写死了
- // 如果调用select函数的话,select函数会根据传入的op参数来决定是把add函数的地址给fp,还是把sub函数的地址给fp
- fp = add;
- printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
- fp = sub;
- printf("%d %c %d = %d\n", num1, op, num2, calc(fp, num1, num2));
- return 0;
- }
复制代码
|
|