把代码传给函数

其实能让c语言变得更强大的就是函数指针了

他可以让更少的代码做更多的事情

可以减少很多的重构成本.......

来看一个简单实用的例子:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
 
int ReturnMaxValue(int left, int right)
{
	return (left > right) ? left : right;
}
 
 
int ReturnMinValue(int left, int right)
{
	return (left < right) ? left : right;
}
 
 
void Show(int left, int right, int (*rule)(int left, int right))
{
	printf("the processing result : %d\n", rule(left, right));
}
 
 
int main()
{
	int left  = 9;
	int right = 99;
 
	Show(left, right, ReturnMinValue);
	Show(left, right, ReturnMaxValue);
 
 
	return 0;
}


来分析一个函数指针的声明:

1、既然他是一个指针所以需要这样声明

int *rule;

2、他有两个参数,所以要这样

int *rule(intleft, int right);

3、如果返回时int*不好区分,所以要用括号括起来

int (*rule)(intleft, int right);

4、最终就得到了函数指针的形态了

 

 

再来看一个简单使用的例子

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
 
char *ReturnMyName(int left, int right)
{
	return (left < right) ? "zengraoli" : "zeng";
}
 
 
int main()
{
	int left  = 9;
	int right = 99;
 
	char *(*rule)(int left, int right);
	rule = &ReturnMyName;
 
	printf("%s\n", rule(left, right));
 
 
	return 0;
}


我们还可以用typedef来精简这个声明:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
 
typedef char *(*function)(int left, int right);
 
 
char *ReturnMyName(int left, int right)
{
	return (left < right) ? "zengraoli" : "zeng";
}
 
 
int main()
{
	int left  = 9;
	int right = 99;
 
	function rule;
	rule = &ReturnMyName;
 
	printf("%s\n", rule(left, right));
 
 
	return 0;
}


可以看到,这样的结果,也是和上面一样的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值