请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入对应栏内。 【C语言代码】 /*变量与类型说明*/ #include "stdio.h"

admin2009-02-01  47

问题 请用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);
   }
在设备驱动程序(函数)Dev_drv1中,对指针ptr的说明如下:
【C语文代码】
   int  Dev_drv1(int arg1,int arg2 )
   {
   struct   node {
     int   ID;
     char  name  [20];
     int   range;
   } ;
   struct node  *ptr;
      /*其他局部变量声明,略*/
             ptr  =  (struct  node *)malloc(sizeof(struct  node)*100);
   /*其他程序代码,略*/
   }
   设int为32位整数,char占8位。当对指针ptr赋完值后的值为0x3751CO,若再执行一条“ptr++;”语句,此时ptr的值为多少?  (用十六进制表示)。

选项

答案ptr的值为以下均按正确对待。 0x3751DC,或3751DCH,或十六进制3751DC,或3751DC。

解析 本题考查对C语言指针变量的理解。在指针赋予某一变量的地址后,该指针就指向该变量所分配的地址空间。需要强调的是,指针变量是有类型的,指针的值加1,表示增加按其声明类型所占的字节数,而不是增加一个字节的地址。因此ptr++后ptr的值比原来增加28个字节,当前的值应为0x3751DC。
转载请注明原文地址:https://jikaoti.com/ti/8gI7FFFM
0

相关试题推荐
最新回复(0)