C语言用函数指针实现一个特别的计算器

 更新时间:2022年07月14日 09:08:38   作者:白朝槿kk  
函数指针是一个指针变量,它可以存储函数的地址,然后使用函数指针,下面这篇文章主要给大家介绍了关于C语言用函数指针实现计算器的方法,需要的朋友可以参考下

函数指针

函数指针就是存放函数地址的指针。

函数指针的重要内容:

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;
}

到此这篇关于C语言用函数指针实现一个特别的计算器的文章就介绍到这了,更多相关C语言计算器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++多重继承二义性原理实例解析

    C++多重继承二义性原理实例解析

    这篇文章主要介绍了C++多重继承二义性原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • C++中vector迭代器失效与深浅拷贝问题详析

    C++中vector迭代器失效与深浅拷贝问题详析

    迭代器失效就是迭代器底层对应指针所指向的空间倍销毁了,导致使用了一块已经被释放了的空间,下面这篇文章主要给大家介绍了C++中vector迭代器失效与深浅拷贝问题的相关资料,需要的朋友可以参考下
    2023-01-01
  • C++开发在IOS环境下运行的LRUCache缓存功能

    C++开发在IOS环境下运行的LRUCache缓存功能

    本文着重介绍如何在XCODE中,通过C++开发在IOS环境下运行的缓存功能。算法基于LRU,最近最少使用,需要的朋友可以参考下
    2012-11-11
  • C++的输入与输出和格式化输出

    C++的输入与输出和格式化输出

    这篇文章主要介绍了详解C++中的输入与输出和格式化输出,是C++入门学习中的基础知识,需要的朋友可以参考,希望能够给你带来帮助
    2021-11-11
  • VScode+ESP32简单环境搭建

    VScode+ESP32简单环境搭建

    本文章向大家介绍ESP32-C3搭建环境教程,主要包括ESP32-C3搭建环境教程使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 浅谈C++反向迭代器的设计

    浅谈C++反向迭代器的设计

    本文主要介绍了浅谈C++反向迭代器的设计,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C++ Cartographer源码中关于Sensor的数据走向深扒

    C++ Cartographer源码中关于Sensor的数据走向深扒

    这篇文章主要介绍了C++ Cartographer源码中关于Sensor的数据走向,整个Cartographer源码阅读是很枯燥的, 但绝对是可以学到东西的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • C++ 中placement new 操作符使用方法

    C++ 中placement new 操作符使用方法

    这篇文章主要介绍了C++ 中placement new 操作符使用方法的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++实现LeetCode(237.删除链表的节点)

    C++实现LeetCode(237.删除链表的节点)

    这篇文章主要介绍了C++实现LeetCode(237.删除链表的节点),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言运用函数的递归实现汉诺塔

    C语言运用函数的递归实现汉诺塔

    递归(recursive)函数是“自己调用自己”的函数,无论是采用直接或间接调用方式。间接递归意味着函数调用另一个函数(然后可能又调用第三个函数等),最后又调用第一个函数。因为函数不可以一直不停地调用自己,所以递归函数一定具备结束条件
    2022-07-07

最新评论