本文主要介绍如何将多个函数存放于数组中,以达到用for循环依次执行各个函数的目的,适用于多个函数要求顺序执行且复用次数高的情况。这类似于一些列函数组成的”任务“。
以下例子实现了将fun0,fun1,fun2这三个函数存放于数组,并且依次调用。
#include "stdio.h"
void fun0(){}
void fun1(){}
void fun2(){}
void main()
{
int (*TAST[3])()={fun0,fun1,fun2};
TAST[0]();
TAST[1]();
TAST[2]();
}
可以通过宏定义以及for循环等语句,将执行过程变得更规范:
#include "stdio.h"
#define TAST_MAX 3
void fun0(){ printf("执行了fun0\n");}
void fun1(){ printf("执行了fun1\n");}
void fun2(){ printf("执行了fun2\n");}
void main()
{
int i=0;
int (*TAST[TAST_MAX])()={fun0,fun1,fun2}; //定义函数任务列表
for(i=0;i<TAST_MAX;i++) //遍历数组
{
if(TAST[i]!=NULL) //不为空
{
TAST[i](); //执行对应的函数
}
}
}
运行结果:
当然,函数的返回值类型也是可以随意更改的,但在调用时应注意根据实际情况,判断函数名或者返回值的数据类型做出不同的响应。以下例子解释说明了各种写法的数据类型:
#include "stdio.h"
void fun0()
{
printf("执行了fun0\n");
}
int fun1()
{
printf("执行了fun1\n");
return 0;
}
double fun2()
{
printf("执行了fun2\n");
return 6.6;
}
void main()
{
int (*TAST[3])()={fun0,fun1,fun2};
TAST[0]();
TAST[1]();
TAST[2]();
}
问_上述代码中:
TAST的数据类型是?TAST[0]的数据类型是?TAST[0]()的数据类型是?
*TAST的数据类型是?TAST[1]的数据类型是?TAST[1]()的数据类型是?
&TAST的数据类型是?TAST[2]的数据类型是?TAST[2]()的数据类型是?
答_在上述代码中:
- TAST的数据类型是一个函数指针数组。
- TAST[0]的数据类型是一个函数指针,指向一个返回类型为void,没有参数的函数。
- TAST[0]()的数据类型是void,因为该函数没有返回值。
- *TAST的数据类型是一个函数指针,指向一个返回类型为void,没有参数的函数。
- TAST[1]的数据类型是一个函数指针,指向一个返回类型为int,没有参数的函数。
- TAST[1]()的数据类型是int,因为该函数返回一个整数值。
- &TAST的数据类型是一个指向函数指针数组的指针。
- TAST[2]的数据类型是一个函数指针,指向一个返回类型为double,没有参数的函数。
- TAST[2]()的数据类型是double,因为该函数返回一个浮点数值。
结束语:c语言各种语法的搭配使用方法非常多,想精通还需要掉许多头发,只能说活到老学到老~