#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;
}