今天看数据结构教材时偶然发现一个奇怪的函数,如下:
Status ListTraverse(LinkList L,Status (*visit)());
该函数中Status和LinkList是用户自定义的数据类型,我们从该函数的原型中可以发现,该函数的第二个入口参数是一个函数,于是我们提出以下问题:
Q:函数的入口参数是否可以是函数?
对此,我们进行相关实验,实验代码如下:
//将函数作为函数的入口参数实验 #include<stdio.h> int dataPro(int i,int j,int (*fun)()); int add(int i, int j); int minus(int i,int j); void main(void) { int a=100; int b=89; printf("%d ",dataPro(a,b,add)); printf("%d ",dataPro(a,b,minus)); } int dataPro(int i,int j,int (*fun)())//定义数据处理函数,其中最后一个输入为函数 { fun(i,j); } int add(int i,int j) { return (i+j); } int minus(int i,int j) { return (i-j); }
上述代码要实现的功能非常明显,我们定义了两个函数add和minus来实现对两个整型变量的加减并返回结果,同时我们又定义了一个数据处理函数dataPro来调用上述定义的加减函数来对数据进行处理。
在dataPro函数的原型中我们可以发现最后一个入口参数为一个返回整型变量的函数fun,该函数本身在声明的时候并没有添加任何入口参数,而在调用时,我们给fun输入了两个参数i和j。由此我们可以发现函数作入口参数时,在入口参数声明处不用写出形参函数的入口参数。
实验结果如下:
189
11
A:综上可知,函数的入口参数也可以是一个函数的。