C语言函数指针数组(简单应用)计算器

简介: C语言函数指针数组(简单应用)计算器

1.函数指针数组

存放函数指针的数组

格式: int (*parr1[10])();

解释:parr1首先和[]结合,说明parr1是数组,接着再和int(*)()结合,说明类型是函数指针。

2.简易版计算器

#include<stdio.h>
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;
}
double Div(int x, int y)
{
  return x*1.0/ y;
}
void menu()
{
  printf("***********************************\n");
  printf("        1.Add       2.Sub          \n");
  printf("        3.Mul       4.Div          \n");
  printf("        0.Exit                     \n");
  printf("***********************************\n");
}
int main()
{
  int inpute = 0;
  int x, y;
  do
  {
    menu();
    scanf("%d", &inpute);
    switch (inpute)
    {
    case 1:
    {
      scanf("%d %d", &x, &y);
      int ret = Add(x, y);
      printf("%d\n", ret);
      break;
    }
    case 2:
    {
      scanf("%d %d", &x, &y);
      int ret = Sub(x, y);
      printf("%d\n", ret);
      break;
    }
    case 3:
    {
      scanf("%d %d", &x, &y);
      int ret = Mul(x, y);
      printf("%d\n", ret);
      break;
    }
    case 4:
    {
      scanf("%d %d", &x, &y);
      double ret = Div(x, y);
      printf("%lf\n", ret);
      break;
    }
    case 0:
    {
      printf("退出成功!\n");
      break;
    }
    default:
    {
      printf("输入错误请重新输入!\n");
      break;
    }
  }
  } while (inpute);
  return 0;
}

3.优化版计算器

简易版计算器在每个case语句部分会有大量的重复,这种被称为代码冗余,而我们可以通过函数指针数组来减少代码量,从而也能实现同样的功能。该代码只是简化了代码量,并没有优化其他部分

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 * 1.0 / y;
}
//简易的菜单
void menu()
{
  printf("***********************************\n");
  printf("        1.Add       2.Sub          \n");
  printf("        3.Mul       4.Div          \n");
  printf("        0.Exit                     \n");
  printf("***********************************\n");
}
int main()
{
  int (*pf[5])() = { 0,Add,Sub,Mul,Div }; 
  //利用函数指针数组来存储函数的地址
  int inpute = 0;//用于选择什么运算
  int x, y;  //操作数
  int ret; //用于接受返回值
  do
  {
    menu();
    scanf("%d", &inpute);
    if (inpute >= 1 && inpute <= 4)
    {
      printf("请输入计算的两个操作数:");
      scanf("%d %d", &x, &y);
      ret = (pf[inpute])(x, y);
      printf("%d\n", ret);
    }
    else if(inpute==0)
    {
      printf("退出成功!\n");
      break;
    }
    else
    {
      printf("选择错误,请重新输入:");
    }
  } while (inpute);
}

总结:函数指针数组虽然用的很少,但是有时候能帮助我们简化一定的代码量。

以上是函数指针数组的内容,如有问题,恳请大佬指点💖

目录
相关文章
|
20天前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
30 3
|
1月前
|
C语言
【c语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
49 0
|
19天前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
30 2
|
28天前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
32 1
|
1月前
|
C语言
【c语言】指针就该这么学(3)
本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
18 2
|
1月前
|
C语言
如何避免 C 语言中的野指针问题?
在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
|
1月前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
1月前
|
编译器 C语言
【c语言】指针就该这么学(2)
本文详细介绍了指针与数组的关系,包括指针访问数组、一维数组传参、二级指针、指针数组和数组指针等内容。通过具体代码示例,解释了数组名作为首元素地址的用法,以及如何使用指针数组模拟二维数组和传递二维数组。文章还强调了数组指针与指针数组的区别,并通过调试窗口展示了不同类型指针的差异。最后,总结了指针在数组操作中的重要性和应用场景。
19 0
|
1月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
25 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。