为了账号安全,请及时绑定邮箱和手机立即绑定

求助求助,具体是要求如下所示,是关于函数的复杂定义的问题!

求助求助,具体是要求如下所示,是关于函数的复杂定义的问题!

Cats萌萌 2021-07-25 21:17:13
我的任务是:1:定义一个数组,该数组是一个指针数组,该指针指向一个函数,再定义一个指向数组的指针2:给该指针数组元素赋值,指向对应函数(函数分别是U16 task1();到task5();)3:定义字程序U16 IntSwi();要求入口是前面定义的指向数组元素的指针(数组里放的是指向函数的指针) 算法是让该指针自加加,然后对指针取值,就是调用相应的task函数,调完5次,退出。求 好心人 帮帮忙我不是学生。以前没学过C语言。现在接到的任务里需要完成这样的工作。但是这个定义太烦了,也没什么好理解的。就是C语言的规则而已。有人知道的,帮小弟搞定一下。888atao写的跟我预想的差不多,不过请给main()之前的定义写个注释,尤其是第一句,有点懵。是不是该写成typedef FUNC U16 (*FUNC)();多谢太清隐者 发一份给我,谢谢。shuiyeweizhi@126.com.不胜感激。
查看完整描述

3 回答

?
SMILET

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;
}



查看完整回答
反对 回复 2021-07-29
?
饮歌长啸

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打开相关检查就会提示这可能是缓冲溢出*/
}



查看完整回答
反对 回复 2021-07-29
  • 3 回答
  • 0 关注
  • 346 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信