/*
函数重载与函数指针
当使用重载函数名对函数指针进行赋值时
根据重载规则挑选与函数指针参数列表一致的候选者
严格匹配候选者的函数类型与函数指针的函数类型
*/
#if 1
void myfunc(int a)
{
printf("a:%d \n", a);
}
void myfunc(char *p)
{
printf("%s \n", p);
}
void myfunc(int a, int b)
{
printf("a:%d b:%d \n", a, b);
}
void myfunc(char *p1, char *p2)
{
printf("p1:%s ", p1);
printf("p2:%s \n", p2);
}
//声明一个 函数类型
typedef void myTypeFunc(int a, int b); //或者
typedef void (myTypeFunc)(int a, int b);
//myTypeFunc *myfuncp = NULL; //定义一个函数指针 这个指针指向函数的入口地址
//声明一个 函数指针 类型
typedef void(* myPTypeFunc)(int a, int b);
//myPTypeFunc fp = NULL; //通过 函数指针类型 定义了 一个函数指针 ,
//声明一个 函数指针变量
void(* myVarPFunc)(int a, int b);
//函数指针变量的使用
void test01()
{
//直接定义函数指针变量并初始化为指向函数myfunc,注意具有myfunc的函数原型很重要
void(*pfun01)(int, int) = myfunc;
//直接定义函数指针变量并初始化
//&是可选的,因为函数名被使用时总是由编译器把它转化为函数指针
void(*pfun02)(int, int) = &myfunc;
//第一种调用方式
//函数名首先被转化为函数指针,该指针指定函数在内存中的位置 然后,
//函数调用操作符调用该函数,执行开始于这个地址的代码
myfunc(11, 22);
//第二种调用方式
(*pfun01)(11, 22);//建议用这种方式
//第三种调用方式
pfun01(11, 22);
}
//使用函数类型
void test02()
{
//使用函数类型定义函数指针
myTypeFunc *fp;
fp = myfunc;
fp(1, 2);//一般用这种
(*fp)(1, 2);
/*{
char buf1[] = "aaaaafff";
char buf2[] = "bbbb";
fp(buf1, buf2);//函数的参数类型决定了调用哪一个函数
}*/
}
//使用函数指针
void test03()
{
//直接使用函数指针
myPTypeFunc Pfp = NULL;
Pfp = myfunc;
Pfp(3, 4);
(*Pfp)(3, 4);
}
//使用函数指针变量
void test04()
{
//使用函数指针变量
myVarPFunc = myfunc;
myVarPFunc(5, 6);//第一种调用方式
(*myVarPFunc)(7, 8);//第二种调用方式
}
void test()
{
test01();
test02();
test03();
test04();
}
#endif
016_函数重载与函数指针
最新推荐文章于 2023-09-06 19:17:13 发布