typedef函数指针与函数类型的定义及使用方式
1、先给出一道面试题:
#include"stdafx.h"
#include"stdio.h"
//实现数值的自增1
int inc(int a)
{
return(++a);
}
//实现数值的相乘
intmulti(int*a,int*b,int*c)
{
return(*c=*a**b);
}
//定义了一个函数类型FUNC1,该函数类型带有一个整型形参,返回一个int型数据。此时FUNC2是一个函数类型。
typedefint(FUNC1)(int in);
//定义了一个函数类型FUNC2,该函数类型带有三个整型指针形参,返回一个int型数据。此时FUNC2是一个函数类型。
typedef int(FUNC2)(int*,int*,int*);
void show(FUNC2*fun,int arg1, int*arg2)
{
FUNC1 *p=inc; //定义一个指向int inc(int a)的函数指针
int temp =p(arg1);//temp=arg1+1;
fun(&temp,&arg1,arg2); //fun函数类型含有三个参数
printf("%d\n",*arg2);
}
int main(int argc,char* argv[])
{
int a;
show(multi,10,&a); //数值为10*11=110
return 0;
}
2、上述代码中的
//定义了一个函数类型FUNC1,该函数类型带有一个整型形参,返回一个int型数据。此时FUNC2是一个函数类型。
typedefint(FUNC1)(int in);
//定义了一个函数类型FUNC2,该函数类型带有三个整型指针形参,返回一个int型数据。此时FUNC2是一个函数类型。
typedef int(FUNC2)(int*,int*,int*);
//引用方式为:
FUNC1 *p=&inc;
FUNC2 *fun=&multi;
还可以定义成函数指针的形式:
//定义一个FUNC1类型的函数指针,该指针指向一个只带有一个int类型的形参,返回值为int类型的函数,此时FUNC1是函数指针
typedefint(*FUNC1)(int in);
//定义一个FUNC2类型的函数指针,该指针指向一个只带有三个int* 类型的形参,返回值为int类型的函数,此时FUNC2是一个函数指针
typedef int(*FUNC2)(int*,int*,int*);</span>
//引用方式为:
FUNC1 p=&inc;
FUNC2 fun=&multi;
3、使用过程中,中间的括号记得用上