把代码传给函数

其实能让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;
}


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


你可能感兴趣的:(把代码传给函数)