c语言函数调用指针修改分数,C语言函数指针调用函数

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

使用:

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

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

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

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

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

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

#include //求最大值

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函数入口赋给fnPt

int max = (*fnPt)(arr,5);//通过函数指针变量调用函数,传入参数

printf("max=%d\n", max);

fnPt = zhizhentest3_2_avg;//将zhizhentest3_2_avg函数入口赋给指针变量fnPt

int avg = (*fnPt)(arr,5);

printf("avg=%d\n", 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");

}输出:

e6af41045737fa8c8172f0a1b405d6cb.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值