S1E30:指针函数和函数指针
#include <stdio.h>//DNX写于2023年11月14日
char *getword(char c);
int square(int num);
int add(int a,int b);
int sub(int a,int b);
int mul(int a,int b);
int sel(int (*fp)(int,int),int a,int b);
int (*option(char))(int,int);
int main()
{
char in;
printf("请输入一个字母:");
scanf("%c",&in);
printf("%s\n",getword(in));//指针函数
int num;
int (*fp)(int);
printf("请输入一个整数:");
scanf("%d",&num);
fp = square;//函数名相当于函数地址
printf("%d * %d = %d\n",num,num,(*fp)(num));//函数指针
//将函数指针作为参数
int a,b;
printf("请输入a b:");
scanf("%d %d",&a,&b);
printf("%d + %d = %d\n",a,b,sel(add,a,b));
printf("%d - %d = %d\n",a,b,sel(sub,a,b));
//将函数指针作为返回值
char op;
int (*fpp)(int,int);
printf("请输入一个算式(仅支持+ - *):");
scanf("%d%c%d",&a,&op,&b);
fpp = option(op);
printf("%d %c %d = %d\n",a,op,b,sel(fpp,a,b));
return 0;
}
char *getword(char c)
{
//指针函数:使用指针变量作为函数的返回值
switch(c)
{
case 'A':
case 'a':return "Apple";break;
case 'B':
case 'b':return "Banana";break;
case 'C':
case 'c':return "Cat";break;
case 'D':
case 'd':return "Dog";break;
default:return "error";
}
//注意:不要返回局部变量的指针
}
int square(int num)
{
return num*num;
}
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 sel(int (*fp)(int,int),int a,int b)
{
return (*fp)(a,b);
}
int (*option(char op))(int,int)
{
switch(op)
{
case '+': return add;
case '-': return sub;
case '*': return mul;
}
}
运行结果:
请输入一个字母:d
Dog
请输入一个整数:3
3 * 3 = 9
请输入a b:1 2
1 + 2 = 3
1 - 2 = -1
请输入一个算式(仅支持+ - *):3*5
3 * 5 = 15
Process returned 0 (0x0) execution time : 21.742 s
Press any key to continue.
在FishC学C的第十五天 加油吖,一起进步
页:
[1]