3 回答
TA贡献1796条经验 获得超4个赞
#include <stdio.h>
typedef int U16;
typedef U16 (*func)();
U16 task1()
{
printf("task1\n");
return 0;
}
U16 task2()
{
printf("task2\n");
return 0;
}
U16 task3()
{
printf("task3\n");
return 0;
}
U16 task4()
{
printf("task4\n");
return 0;
}
U16 task5()
{
printf("task5\n");
return 0;
}
U16 IntSwi(func *p)//3:定义字程序U16 IntSwi();
{
int i;
for(i=0;i<5;i++,p++)
{
(*p)();
}
return 0;
}
int main()
{
func myfunc[5];//1:定义一个数组,该数组是一个指针数组,该指针指向一个函数;
func *p=myfunc; //再定义一个指向数组的指针
//2:给该指针数组元素赋值,指向对应函数(函数分别是U16 task1();到task5();)
myfunc[0]=task1;
myfunc[1]=task2;
myfunc[2]=task3;
myfunc[3]=task4;
myfunc[4]=task5;
IntSwi(p);
return 0;
}
TA贡献1951条经验 获得超3个赞
/*下面的例子的判断在DVEC++里编译运行通过的*/
/*我随便定义的函数来用*/
typedef unsigned short U16;
U16 task1(){};
。。。。。
U16 task5(){};
第一个:
/*A 定义一个数组,该数组是一个指针数组,该指针指向一个函数*/
/*函数原型为void fun() 参数列表自己改*/
void (*a[5/*大小这里改*/])(/*参数列表这里改*/);
/*B 再定义一个指向数组的指针*/
void (*(*b)[5/*大小这里改*/])(/*参数列表这里改*/); /*b=&a 这是正确的赋值*/
第二个:
a[0]=task1;
.....
a[4]=task5;
第三个:
靠,早点说这些定义的类型多处使用,那就应该typedef了
第一个改:
typedef void (*A[5/*大小这里改*/])(/*参数列表这里改*/);
typedef void (*(*B)[5/*大小这里改*/])(/*参数列表这里改*/);
第二个改:
A tasks;
tasks[0]=task1;
.....
tasks[4]=task5;
第三个改:
U16 IntSwi(B tasks)
{
B[0][0]();
B[0][1]();
B[0][2]();
B[0][3]();
B[0][4]();
/*如果编译器聪明,B[0][5]()就会给出警告,例如VC++2002打开相关检查就会提示这可能是缓冲溢出*/
}
- 3 回答
- 0 关注
- 339 浏览
添加回答
举报