目录
函数指针
函数的地址
函数指针,也就是存放函数地址的变量,有人会问,函数也会有地址吗?我们用一个代码来验证一下吧。
#include <stdio.h>
void test()
{
printf("hehe\n");
}
int main()
{
printf("test: %p\n", test);
printf("&test: %p\n", &test);
return 0;
}
我们用&符号对函数取地址并以地址的形式打印,结果如图,很显然函数的确拥有自己的地址,并且函数名就是函数的地址。
函数指针结构
type (*p)(int,int);
type:表示函数返回类型
(*p):表示p变量是一个指针
(int,int):表示函数的参数是俩个整型
利用指针来调用函数:
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int(*pf3)(int, int) = Add;
printf("%d\n", (*pf3)(2, 3));
printf("%d\n", pf3(3, 5));
return 0;
}
函数指针数组
了解函数指针数组
函数指针数组就是将函数的地址放在一个数组里面,通过访问数组的元素来访问函数,达到简洁代码的效果。
函数指针数组结构
int (*p[5])(int,int);
type:表示函数返回类型
(*p[5]):表示p变量是一个指针数组,有5个元素
(int,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 = 0;
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;
}
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 = 0;
int y=0;
int input = 0;
int ret = 0;
int (*p[5])(int, int) = {0,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 >= 1 && input <= 4)
{
printf("输入操作数:");
scanf("%d %d", &x, &y);
ret = (* p[input])(x, y);
printf("%d\n",ret);
}
else if (input == 0)
{
printf("exit\n");
break;
}
else
{
printf("输入错误,重新输入!");
}
} while (input);
return 0;
return 0;
}
-------------------------分隔符
关于函数指针有关的内容就基本介绍完了,感谢观看。
有错请指正,共勉。