指针函数和函数指针的使用例子

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#define bool int
#define false 0
#define true 1
typedef int(*FP_CALL)(int,int);//函数指针的定义

int add(int a,int b)
{
	return (a+b);
}
int sub(int a,int b)
{
	return (a-b);
}
int mul(int a,int b)
{
	return (a*b);
}
int dip(int a,int b)
{
	return (a/b);
}

FP_CALL calc_func(char op)//返回函数指针的指针函数
{
	switch (op)
	{
	case '+':
		return add;
	case '-':
		return sub;
	case '*':
		return mul;
	case '/':
		return dip;
	default:
		return NULL;
	}
	return NULL;
}


 int calc(int a,int b,char op)
 {
 	FP_CALL fp=calc_func(op);
 	if(fp)
 		return fp(a,b);
 	else
 		return -1;
 }
int main()
{
	int a=100,b=20;
	printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));
	return 0;
}
实例2
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int is_not_print(int ch)
{
	return !isprint(ch);
}
static int(*test_func[])(int)={
		iscntrl,
		isspace,
		isdigit,
		islower,
		isupper,
		ispunct,
		is_not_print
};

#define N_CATEGORIES (sizeof(test_func)/sizeof(test_func[0]))

char* label[]={
		"control",
		"whitespace",
		"digit",
		"lower case",
		"upper case",
		"punctuation",
		"no-printable"
};

int count[N_CATEGORIES];
int total=0;

int main()
{
	int ch;
	int category;
	while((ch = getchar()) != EOF)
	{
		for(category=0;category<N_CATEGORIES;category++)
		{
			if(test_func[category](ch))
				count[category]++;
		}
		count++;
	}

	if(total == 0)
		{
			printf("no characters is the input \n");
		}
	else
	{
		for(category=0;category<N_CATEGORIES;category++)
		{
			printf("%3.0f%% %s characters \n",count[category]*100.0/total,label[category]);
		}
	}
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值