首页 > 编程知识 正文

c语言指针函数调用例子,c语言的函数指针

时间:2023-05-05 00:16:43 阅读:277453 作者:1868

C语言可以定义指针变量指向函数,通过指针来调用函数。

使用:

1、定义函数指针变量:  函数返回值类型 (*指针变量名)();

2、将已有函数入口赋值给函数指针变量:fnPt = avg;

3、使用指针变量调用函数:(*指针变量名)(参数);


注意:看了一些参考资料里,声明函数指针时不用指定参数类型,但实际编辑时又提示指定参数类型才可以。

例如例子中的 int (*fnPt)(int*, int) = zhizhentest3_1_max;  这里就需要带上参数类型才行,否则编译时报错。


例子:定义函数指针变量,将不同函数赋值给指针变量,调用函数。

#include <stdio.h>//求最大值int zhizhentest3_1_max(int* data, int len){int max = *data;//获取数组首地址对应的元素值//通过指针+1来获取下一个元素的地址for(int* p=data; p < data+len; p++){if(*p > max) max = *p;}return max;}//求平均值int zhizhentest3_2_avg(int* data, int len){int sum = 0;for(int* p=data; p < data + len; p++){sum +=*p;}return sum/len;}//函数指针变量作为函数参数void zhizhentest3_3_map(int* data, int len, int (*fn)(int)){for(int* p = data; p < data + len; p++){printf("%d, ", (*fn)(*p));}printf("n");}//不变int zhizhentest3_4_nochange(int val){return val;}//求平方int zhizhentest3_5_square(int val){return val * val;}//求立方int zhizhentest3_6_cube(int val){return val * val * val;}//返回指针的函数int* zhizhentest3_7_map(int* data,int len, int (*fn)(int)){static int result[5];int i=0;for(int* p = data; p < data + len; p++){result[i++] = (*fn)(*p);}return result;}void zhizhentest3main(){int arr[5] = {4,7,2,3,9};int (*fnPt)(int*, int) = zhizhentest3_1_max;//定义返回值为int型的函数指针变量*fnPt,并将zhizhentest3_1_sum函数入口赋给fnPtint max = (*fnPt)(arr,5);//通过函数指针变量调用函数,传入参数printf("max=%dn", max);fnPt = zhizhentest3_2_avg;//将zhizhentest3_2_avg函数入口赋给指针变量fnPtint avg = (*fnPt)(arr,5);printf("avg=%dn", avg);printf("n");printf("数组元素为:n");zhizhentest3_3_map(arr,5,zhizhentest3_4_nochange);printf("元素求平方:n");zhizhentest3_3_map(arr,5,zhizhentest3_5_square);printf("元素求立方:n");zhizhentest3_3_map(arr,5,zhizhentest3_6_cube);printf("n");int* result1 = zhizhentest3_7_map(arr,5,zhizhentest3_4_nochange);printf("返回的指针数组元素为:n");for(int* p1 = result1; p1 < result1 + 5; p1++){printf("%d, ", *p1);}printf("n");int* result2 = zhizhentest3_7_map(arr,5,zhizhentest3_5_square);printf("返回的数组平方元素为:n");for(int* p2 = result2; p2 < result2 + 5; p2++){printf("%d, ", *p2);}printf("n");int* result3 = zhizhentest3_7_map(arr,5,zhizhentest3_6_cube);printf("返回的数组立方元素为:n");for(int* p3 = result3; p3 < result3 + 5; p3++){printf("%d, ", *p3);}printf("n");}输出:



版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。