函数指针
函数指针就是存放函数地址的指针。
函数指针的重要内容:
1.函数指针的使用:函数的类型(指针)(函数的形参类型)= 函数名;注意:函数的形参那里是不需要形参的变量名的。,如果函数没有形参,就不需要填任何东西,void也不行。这么使用完之后,这个指针就是一个函数指针了。
2.函数指针调用函数的方法:****(指针)(实参);注意:这里的指针有两种表达方式,比如定义了一个叫*p 的函数指针,函数的返回类型为空,没有形参。这里的调用就可以写成(*p)();也可以写成p(); 这两种方式都可以写,但为了方便,不推荐使用第一种。
3.函数指针可以作为函数的形参,如果需要传递实参,可以直接传函数名。
实现计算器程序的思想
首先计算器要有最基本的运算,也就是加减乘除,其次我们要写一个简单的菜单,然后让用户进行选择,选择完之后就是输入数字进行运算并且打印出来,考虑到用户可能要进行多次的使用,所以可以加一些循环语句,让用户可以多次使用。
基本上实现计算器我们要考虑的问题都在这了,在这个程序中,最重要的就是用数组指针来调用加减乘除的函数,其它部分都很简单,下面我们来实现这部分的函数。
用函数指针调用加减乘除函数
先看一下代码:
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 exc(int x, int y)
{
return x / y;
}
void func(int *(pf)(int, int y))
{
int x = 0;
int y = 0;
printf("请输入两个数:");
scanf("%d%d", &x, &y);
int ret = pf(x, y);
printf("结果为:%d\n", ret);
}
在func这个函数中,形参是一个函数指针,因为加减乘除返回值,形参都是一样的,所以只要传递不同的函数进去,前面说过形参是函数指针可以直接传递函数名,这样就在func里可以实现对应函数的运算并且打印出来了。
完整代码+运行截图
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
printf("|-------------------|\n");
printf("|-------1.加--------|\n");
printf("|-------2.减--------|\n");
printf("|-------3.乘--------|\n");
printf("|-------4.除--------|\n");
printf("|-------0.退出------|\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 exc(int x, int y)
{
return x / y;
}
void func(int *(pf)(int, int y))
{
int x = 0;
int y = 0;
printf("请输入两个数:");
scanf("%d%d", &x, &y);
int ret = pf(x, y);
printf("结果为:%d\n", ret);
}
int main()
{
int n = 0;
int flag = 1;
while (flag)
{
menu();
printf("请选择你想要的运算:");
scanf("%d", &n);
switch (n)
{
case 1:
func(add);
break;
case 2:
func(sub);
break;
case 3:
func(mul);
break;
case 4:
func(exc);
break;
case 0:
flag = 0;
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
}
return 0;
}