void Fun1()
{
int j = 0 ;
}
void Fun2(int n)
{
int i = 0 ;
}
typedef void (*ptrFun)(int n) ;
void main(void)
{
ptrFun ptr = (ptrFun)Fun1 ;
ptr(2) ;
}
经过调试追踪,ptr调用的函数是Fun1
int Fun1()
{
int j = 0 ;
return 8 ;
}
void Fun2(int n, BOOL flag)
{
int i = 0 ;
}
typedef int (*ptrFun1)() ;
void main(void)
{
ptrFun1 ptr = (ptrFun1)Fun2 ;
ptr() ;
}
经过调试追踪,ptr调用的是Fun2, 而且Fun2的 n 和 flag 的值默认为0 ;
下面这个会报错:
void Fun1()
{
int j = 0 ;
}
void Fun2(int n)
{
int i = 0 ;
}
typedef void (*ptrFun)(int n) ;
void main(void)
{
ptrFun ptr = (ptrFun)Fun1 ;
ptr() ; // 参数缺少
}
下面会报错:
int Fun1()
{
int j = 0 ;
return 8 ;
}
void Fun2(int n, BOOL flag)
{
int i = 0 ;
}
typedef int (*ptrFun1)() ;
void main(void)
{
/*ptrFun1 ptr = (ptrFun1)Fun2 ;
ptr() ;*/
Fun2() ; // 参数缺少
}
总结:
对于转换类型的函数,调用的是转换之前的函数,但是参数的匹配是按照转换之后的函数形式来匹配。