这篇博客也是为了补充一下,在C语言指针当时的函数指针以及函数指针数组的应用的补充,我会在下面讲述一下函数指针在一些特定场合的应用的优势,我会在后面附上C源码希望大家支持!!!
知识总结:
1.函数名就是函数的地址,&函数名与函数名 意义一样
2.函数指针的大小依旧是4/8;
3.
我们对这一行代码进行简单的分析:
1.它是一个函数指针数组,数组名是pfarr,它一共有7个元素每个元素当时函数指针,
2.函数指针指向的是有俩个int类型参数,返回类型同样是int类型
3.函数指针数组在这种情况下,函数指针数组在代码性能,可维护性上更加强大
代码分析:
我们可以看出来使用简单的SWITCH语句我们的代码会有很大的冗余,多段的代码都是重复的,或者说如果我们再次来增加这个计算机的功能,我们只能不断的追加SWITCH语句的情况,这样我们的代码会在一个MIAIN函数中不断的边长,情况越来越复杂,
与上面的相比SWITCH语句,我们使用函数指针数组,当我们使用那种功能时,直接调用函数,我们不会再次出现代码冗余,并且再次追加功能是,我们只需要设计好函数,将他追加在函数指针数组中
#define _crt_secure_no_warnings
#include<stdio.h>
//稍微精致的计算机
#include<math.h>
void face()
{
printf("*****************************\n");
printf("****1. + 2. - *****\n");
printf("****3. * 4. / *****\n");
printf("****5. %% 6. ^ *****\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 rem(int x, int y)
{
return (x % y);
}
int pow(int x, int y)
{
return ((int)pow(x,y));
}
int main()
{
int n;
int x = 0, y = 0;
int ret = 0;
int(*pfarr[7])(int, int) = { 0, add, sub, mul, div, rem, pow };
do
{
face();
printf("请您选择:");
scanf("%d", &n);
if ( n == 0)
{
printf("请您正确输入!!!\n");
}
printf("请您输入你要计算的俩个数字:");
scanf("%d %d", &x, &y);
ret = pfarr[n](x,y);
printf("%d\n", ret);
} while (n);
printf("欢迎您的使用\n");
return 0;
}
简单的计算机
int main()
{
face();
int n = 0;
int x = 0, y = 0;
int sum = 0;
do
{
printf("请您选择:");
scanf("%d", &n);
switch (n)
{
case 1://加
scanf("%d %d", &x, &y);
sum = x + y;
printf("%d + %d = %d\n", x, y, sum);
break;
case 2://减
scanf("%d %d", &x, &y);
sum = x - y;
printf("%d - %d = %d\n", x, y, sum);
break;
case 3://乘
scanf("%d %d", &x, &y);
sum = x * y;
printf("%d * %d = %d\n", x, y, sum);
break;
case 4://除
scanf("%d %d", &x, &y);
sum = x / y;
printf("%d / %d = %d\n", x, y, sum);
break;
case 5://取余
scanf("%d %d", &x, &y);
sum = x % y;
printf("%d % %d = %d\n", x, y, sum);
break;
case 6://次方
scanf("%d %d", &x, &y);
sum = x ^ y;
printf("%d ^ %d = %d\n", x, y, sum);
break;
case 0:
printf("欢迎您的使用!!!\n");
break;
default:
printf("请您正确输入!!!\n");
break;
}
} while (n);
return 0;
}