#include <stdio.h>
int add(int* a, int* b)
{
printf("%p --> %s\n",add,__FUNCTION__);
return *a+*b;
}
int sub(int* a, int* b)
{
printf("%p --> %s\n",sub,__FUNCTION__);
return *a-*b;
}
//int (*opterator)(void*,void*),void*可以接受任何指针类型覆盖,以覆盖类型为准
//可以接受
//int* add1(int* a, int* b)
//float* add2(float* a, int* b)
int Interface(int (*opterator)(void*,void*) ,int operand1, int operand2)
{
printf("%p --> %s\n",Interface,__FUNCTION__);
return opterator(&operand1,&operand2);
}
int main(int argc, char* argv[])
{
int a = 1;
int b = 2;
printf("%d\n",Interface(&add,a,b));
printf("%d\n",Interface(&sub,a,b));
return 0;
}
#include <stdio.h>
int add(int a, int b)
{
printf("%p --> %s\n",add,__FUNCTION__);
return a+b;
}
int sub(int a, int b)
{
printf("%p --> %s\n",sub,__FUNCTION__);
return a-b;
}
typedef int (func)(int,int);
func* selection(char opcode)
{
switch(opcode)
{
case '+':
return &add;
break;
case '-':
return ⊂
break;
}
return NULL;
}
int Interface1(func* opterator,int operand1, int operand2)
{
printf("%p --> %s\n",Interface1,__FUNCTION__);
return opterator(operand1,operand2);
}
int Interface2(char opcode,int operand1, int operand2)
{
printf("%p --> %s\n",Interface2,__FUNCTION__);
func* opterate = selection(opcode);
return opterate(operand1,operand2);
}
int main(int argc, char* argv[])
{
printf("%d\n",Interface1(&add,1,2));
printf("%d\n",Interface2('-',1,2));
return 0;
}
#include <stdio.h>
int add(int a, int b)
{
printf("%p --> %s\n",add,__FUNCTION__);
return a+b;
}
int sub(int a, int b)
{
printf("%p --> %s\n",sub,__FUNCTION__);
return a-b;
}
typedef int (func)(int,int);
func* fptrarray[128] = {NULL};
void Initfarray(void)
{
fptrarray['+'] = add;
fptrarray['-'] = sub;
}
int Interface(char opcode,int operand1, int operand2)
{
printf("%p --> %s\n",Interface,__FUNCTION__);
func* opterate = fptrarray[opcode];
return opterate == NULL ? 0 : opterate(operand1,operand2);
}
int main(int argc, char* argv[])
{
Initfarray();
printf("%d\n",Interface('+',1,2));
printf("%d\n",Interface('-',1,2));
return 0;
}