请问一个工具函数的其中一个参数是一个指针函数,这个指针函数也有参数并有返回值,那么工具函数的编写可以写指针函数里的参数吗
应该是可以的,在工具函数调用这个指针函数,把参数传给它即可,但不知道我理解的是不是和你一样,测试代码如下:
参考资料:
C Primer Plus(第6版)中文版- 第14章 结构和其他数据形式 - 14.14 函数和指针 (第481页,第482页)
#include <stdio.h>
// 指针函数,用于返回数组arr中寻找指定的数num的地址
// int * arr 指向int数组的指针
//int n 数组长度
//int num 为 需要查找的数字
int * findArrNum(int *arr,int n,int num){
int i;
for(i=0;i<n;i++){
if(arr[i]==num){ // 如果数组中当前元素的值等于num,则返回指向这个数 的指针
return arr+i(
}
}
return NULL; // 如果没有找到返回NULL
}
// int * (*pf)(int *,int ,int) 指向返回值为int指针,参数为一个int指针,两个int的函数的指针 (函数指针)
// int * arr 指向int数组的指针
//int n 数组长度
//int num 为 需要查找的数字
int * toolFunc(int * (*pf)(int *,int ,int),int * arr,int n,int num){
// 利用传入toolFunc函数的后3个参数来调用 传入toolFunc函数的函数指针指向的函数
int * p = (*pf)(arr,n,num);
return p; //返回调用函数的结果
}
int main(void){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int num;
printf("请输入要查询的数字:");
scanf("%d",&num);
// 让函数指针pf指向 findArrNum函数
int * (*pf)(int *,int ,int) = findArrNum;
int * p = toolFunc(pf,arr,10,num); // 调用工具函数toolFunc来测试函数调用的结果
// 打印结果
if(p!=NULL){
printf("目标值的地址是:%p, 它的值是:%d\n",p,*p);
} else{
printf("在数组中没有找到目标值%d。\n",num);
}
return 0;
}