【C语言】使用函数指针做一个与众不同的计算器

简介: 函数指针就是存放函数地址的指针。函数指针的重要内容:函数指针的使用:函数的类型(指针)(函数的形参类型)= 函数名;注意:函数的形参那里是不需要形参的变量名的。,如果函数没有形参,就不需要填任何东西,void也不行。这么使用完之后,这个指针就是一个函数指针了。

函数指针


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

函数指针的重要内容:

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;

}


17.png17.png

17.png

18.png

相关文章
|
3月前
|
C语言
【c语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
68 0
|
1月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
103 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
1月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
85 9
|
1月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
52 7
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
215 13
|
2月前
|
存储 C语言 开发者
C 语言指针与内存管理
C语言中的指针与内存管理是编程的核心概念。指针用于存储变量的内存地址,实现数据的间接访问和操作;内存管理涉及动态分配(如malloc、free函数)和释放内存,确保程序高效运行并避免内存泄漏。掌握这两者对于编写高质量的C语言程序至关重要。
76 11
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
179 3
|
2月前
|
存储 算法 程序员
C 语言指针详解 —— 内存操控的魔法棒
《C 语言指针详解》深入浅出地讲解了指针的概念、使用方法及其在内存操作中的重要作用,被誉为程序员手中的“内存操控魔法棒”。本书适合C语言初学者及希望深化理解指针机制的开发者阅读。
|
2月前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
57 1

热门文章

最新文章