前言
提示:本文继续上一期的函数指针进行函数指针数组的讲解,学习前一定一定要先预习一下函数指针!本文的函数指针数组学习意在帮助大家建立一个简洁有效的函数使用体系,相信聪明的你学习完本文一定有收获!!!。
提示:以下是本篇文章正文内容,下面案例可供参考
一、引子
示例:以下这个代码,我们可以很清楚的看出,arr是一个整形指针数组,数组里的每个元素均为整形指针
int *arr[10];
那我们就会有接下来的两个问题:
整形指针能放入到一个数组内,那么参数、返回类型相同的函数指针能否也可以放入一个数组内?如果可以,我们应该如何创建那个数组呢?
二、使用步骤
1.创建函数指针数组
先上代码(示例):
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int main()
{
int(*p1)(int, int) = Add;//Add和Sub的函数指针类型为int(*)(int,int)
int(*p2)(int, int) = Sub;
int(*parr[2])(int,int)={Add,Sub};
}
由以上代码,我们不难看出,函数Add和函数Sub除了名字和功能不同,它们的参数和返回类型均相同,我们可以写出它们共同的函数指针类型(详情见上一期的C语言快速入门):int(*)(int,int) ,也就是说,只要我们由Add和Sub两个函数的地址,我们都可以放到int( * )(int,int)这个类型中去
那么Add和Sub这两个函数指针数组类型怎么创建?我们举两个简单的例子:
int a;//将变量名a删去就是类型 int也就是整形
int arr[10];//将变量名arr删去就是类型 int [10]也就是整形数组
整形和整形数组类型的差别也就是多了一个[ ]这样的东西
这里找函数指针数组类型的创建法也是同样的道理,我们仍以Add函数为例,已知了Add函数指针类型为int( * )(int,int),我们在 * 后跟一个[ ]即可 也就是如下代码,初始化和别的数组初始化没有什么区别,我们正常把函数Add和Sub放入(函数名==&函数名,详情见上一期函数指针)
int(*parr[2])(int,int)={Add,Sub};//这里初始化放入的是函数的地址
//parr就是一个函数指针数组
2.函数指针数组的实际使用案例
比如我们这里写一个加减乘除的简易计算器
代码如下(示例):
Add Sub Mul Div分别代表加减乘除
#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;
}
int Div(int x, int y)
{
return x / y;
}
void menu()
{
printf("*************\n");
printf("***1.Add ***\n");
printf("***2.Sub ***\n");
printf("***3.Mul ***\n");
printf("***4.Div ***\n");
printf("***0.exit ***\n");
}
int main()
{
int input = 0;
do
{
int x = 0;
int y = 0;
int z = 0;
menu();
printf("请选择:");
scanf("%d", &input);
int(*parr[5])(int, int) = { 0,Add,Sub,Mul,Div };
//这里为什么要加0,是为了让数组中Add到Div下标分别是1到4,对应计算器菜单中的选项
if (input == 0)
{
printf("退出计算器\n");
}
else if (input >= 1 && input <= 4)
{
printf("请输入2个操作数\n");
scanf("%d %d", &x, &y);
z=parr[input](x,y);//parr是存放函数指针的数组,有了下标也就有了某个函数指针(也就是函数地址)
//我们在函数指针那一块讲解过:调用函数的时候可以直接用函数地址调用(详情见上一期C语言快速入门)
printf("计算结果为%d\n", z);
}
else
{
printf("输入错误,请重新输入\n");
}
} while (input);
return 0;
}
该段代码有以下一些注意点:
1.在写函数指针数组时,因为下标的缘故,菜单中的选项和实际存放的函数指针是不匹配的,我们可以在Add前加一个0(该0本身是无意义的)将下标依次加1个
2.parr是存放函数指针的数组,有了下标也就有了某个函数指针(也就是函数地址)我们在函数指针那一块讲解过:&Add=Add,调用函数的时候可以直接用函数地址调用(详情见上一期C语言快速入门)
这里用函数指针数组写的好处是什么?
在日常的工作中,我们如果要写一个需要用到很多函数的程序,而这个程序将来也极其有可能增加新的或删减旧的函数。传统的更改方式,一旦不小心,可能会损伤到其他正常的代码,导致满盘皆输。如果用函数指针数组,我们只需要对函数指针数组大小变换一下,再将新的或旧的在函数指针数组初始化中修改一下即可,而在函数调用方面也不需进行更改,非常非常非常的方便。
总结
提示:本文的函数指针数组学习重点为函数指针数组的创建与使用,在具体实践中,要学会通过函数指针数组调用各个函数。学习完本文,相信屏幕前的你在将来的关于函数工作或学习也将更加得心应手,预祝学习愉快。