早教吧 育儿知识 作业答案 考试题库 百科 知识分享
早教吧考试题库频道 --> 计算机类考试 -->软考中级 -->

阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。【说明】 在嵌入式操作系统设备管

题目

阅读以下说明和C语言代码,回答问题1至问题4,将解答填入对应栏内。

【说明】

在嵌入式操作系统设备管理的实现上,常使用到C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段C语言代码是驱动管理程序 manage_device调用4个不同设备驱动程序,但没有用到函数指针变量。

【C语言代码】

/*变量与类型说明*/

include "stdio.h"

include "stdlib.h"

extern int sys_status;

extern int Dev_drv1(int arg1, int arg2);

extern int Dev_drv2(int arg1, int arg2);

extern int Dev_drv3(int arg1, int arg2);

extern int Dev_drv4(int arg1, iht arg2);

define NOERROR 0

type struct {

int _fd;

} TYP_DEV_TAB;

TYP DEV_TAB dev_tab[50]= {101,99, 80, 120,};

/*程序代码*/

void manage_device(int devid, int arg1, int arg2)

{ int place ;

int ret;

for(place=0 ; place<50 ; place++)

if dev_tab [place]. fd == devid) break;

if(place>=50)

printf(" NO DEVICE fd = %d\n ",devid);

switch(dev_tab [place]._fd) {

case 80:

ret = Dev_drv3(int arg1,int arg2);

break;

case 99:

ret = Dev_drv2(int arg1,int arg2);

break;

case 101:

ret = Dev_drv1(int arg1,int arg2);

break;

case 120:

ret = Dev_drv4(int arg1,int arg2);

break;

}

if (ret!=NOERROR)

printf(" DEVICE %d error!\n ", devid);

}

int Dev_drv1(int arg1,int arg2)

{

/*局部变量声明,略*/

/*驱动程序代码,略*/

}

int Dev_drv2(int arg1,int arg2)

{

/*局部变量声明,略*/

/*驱动程序代码,略*/

}

int Dev_drv3(int arg1,int arg2)

{

/*局部变量声明,略*/

/*驱动程序代码,略*/

}

int Dev_drv4(int arg1,int arg2)

{

/*局部变量声明,略*/

/*驱动程序代码,略*/

请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。

【C语言代码】

/*变量与类型说明*/

include "stdio.h"

include "stdlib.h"

extern int sys_status;

extern int Dev_drv1(int arg1, int arg2);

extern int Dev_drv2(int arg1, iht arg2);

extern int Dev_drv3(int arg1, int arg2);

extern int Dev_drv4(int arg1, int arg2);

define NOERROR 0

typedef struct {

int _fd;

(1) 函数指针变量说明;/* 变量名用process */

} TYP_DEV_TAB;

TYP_DEV_TAB dev_tab[50]= {{101, Dev_drv1},{99, Dev_drv2},

{80, Dev_drv3},{120, Dev_dry4},};

/* 程序 */

void manage_device(int devid, int arg1, int arg2)

{ iht place ;

int ret;

(2) 函数指针变量说明;/*局部变量,变量名用ProcAction */

for(place=0 ; place<50 ; place++) {

if(dev_tab [place]._fd == devid) {

(3) 语句1;/* 变量名胜ProcAction, 得到具体函数的入口地址 */

break;

}

}

if(place>=50)

printf("NO DEVICE fd = %d\n",devid);

(4) 语句2;

if(ret!=NOERROR)

printf("DEVICE %d error!", devid);

}

参考答案
正确答案:(1)int (*process)(int arg1int arg2); (2)int (*ProcAction)(int arg1int arg2); (3)ProcAction=dev_tab[place].process; (4)ret=ProcAction(arg1arg2);
(1)int (*process)(int arg1,int arg2); (2)int (*ProcAction)(int arg1,int arg2); (3)ProcAction=dev_tab[place].process; (4)ret=ProcAction(arg1,arg2); 解析:本题考查对C语言中函数指针变量的理解和用法。在C语言中,可以用指针变量指向整型变量、字符串、数组、结构变量,也可以指向一个函数,对指针的用法非常灵活,也很容易出错。其中,函数指针变量为较高级的用法。
一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
本题已将使用变量指向函数编写设备驱动程序的大部分给出,只需在对函数指针变量的声明和引用处,只需给出正确的用法即可。
看了阅读以下说明和C语言代码,回答...的网友还看了以下:

阅读下列说明和代码,回答问题1和问题2,将解答卸载答题纸的对应栏内。【说明】某一本地口令验证函数( 计算机类考试 2020-05-26 …

2011高考历史广东卷问答题答案(1)从国际和国内两方面分析20世纪30年代计划经济思潮在中国兴起 历史 2020-06-10 …

“李白喝酒”的java编程问题,“遇店加一倍,见花喝一斗”,问题和代码如下,能帮我解释下代码的意思 其他 2020-07-10 …

对对联和问答题上联:一碗饭,当思来之不易.下联:示例:瓜熟蒂落(水到渠成)旗开得胜()问答题:我们 语文 2020-07-26 …

某中学在评选“校园之星”时,对参评的同学设计了“情境问答”和“参评感言”等环节。请你以参评选手的身份 政治 2020-11-23 …

课前三分钟,有奖问答我们班上语文课的时候,老师抽出课前3分钟,每天让我们上去1名同学表演写东西,我们 语文 2020-11-28 …

语文课上的活动我们班上语文课的时候,老师就抽出课前3分钟,每天让我们上去1名同学表演些东西,我们班大 语文 2020-11-29 …

陪伴了几代中国人的大型科普丛书《十万个为什么》正在进行第六版的编纂工作。与以往不同的是,这次编纂不再 政治 2020-12-04 …

某中学在评选“校园之星”时,对参评的同学设计了“情境问答”和“参评感言”等环节。请你以参评选手的身份 政治 2020-12-15 …

如何应对英语演讲赛中的问答和即兴演讲?马上要参加英文演讲赛了,希望有经验的朋友给我分享一下关于评委问 其他 2020-12-19 …