函数指针总结:
总共含有四个程序
说明了
typedef Tpye(func)(parameter list)和typedef Tpye(*func)(parameter list)的区别
顺带说明了下函数数组的使用。
第一个程序:
-------------------------------------------------------
#include<stdio.h>
typedef int (func)(void);//相当于定义一个函数数据类型
int test(void)
{
printf("test\n");
return 0;
}
int main(void)
{
func *pt = test;//将test的函数地址赋值给pt指针
test(); //这两种方式调用是一样的
(*test)();
return 0;
}
--------------------------------------------------------
第二个程序:
------------------------------------------------------------
#include<stdio.h>
typedef int (func)(void);
int test1(void)
{
printf("test1\n");
return 0;
}
int test2(void)
{
printf("test2\n");
return 0;
}
int hang(void)
{
printf("hang()\n");
return 0;
}
int main(void)
{
func *func_arr[] = {test1,test2,NULL};
func **pt;
for(pt = func_arr;*pt;++pt)//这里的判定条件才是测试函数数组的项的条件
{
if((*pt)() != 0)//这里测试的是函数的返回值 而不是函数数组的项。
hang();
}
return 0;
}
------------------------------------------------------------
第三个函数:
#include<stdio.h>
typedef int (*func)(void);
int test1(void)
{
printf("test1\n");
return 0;
}
int test2(void)
{
printf("test2\n");
return 0;
}
int hang(void)
{
printf("hang()\n");
return 0;
}
int main(void)
{
func pt = test1;
pt();
(*pt)();
return 0;
}
---------------------------------------------------------------
第四个函数:
---------------------------------------------------------------
#include<stdio.h>
typedef int (*func)(void);//定义一个函数指针
int test1(void)
{
printf("test1\n");
return 0;
}
int test2(void)
{
printf("test2\n");
return 0;
}
int hang(void)
{
printf("hang()\n");
return 0;
}
int main(void)
{
func func_arr[] = {test1,test2,NULL};
func *pt;
for(pt = func_arr;*pt;++pt)
{
if((*pt)() != 0)
hang();
}
return 0;
}
----------------------------------------------------------------
函数指针和函数数组使用
最新推荐文章于 2024-04-29 23:50:53 发布