我有一个关于NetBios NCB(网络控制块)的问题,我想知道为什么如果结构没有任何指针,我们可以使用此语法,如下所示的示例。


UCHAR reset( NCB *block ) {
    block->ncb_command = NCBRESET;
    block->ncb_lana_num = 2;
    block->ncb_lsn = 0;
    block->ncb_num = 0;
    Netbios(block);
    return block->ncb_retcode;
}



int main()
{
   NCB blok;
   UCHAR err;

   printf ( "reset:");
   err = reset(&block);
   if ( err != NRC_GOODRET ) {
   printf ( "ERROR %x\n" , err ) ;
   }
   else {
   printf ( "SUCCEED ! (%x)\n", err) ;
   };
}


NCB的结构如下所示:

typedef struct _NCB {
   UCHAR  ncb_command;
   UCHAR  ncb_retcode;
   UCHAR  ncb_lsn;
   UCHAR  ncb_num;
   PUCHAR ncb_buffer;
   WORD   ncb_length;
   UCHAR  ncb_callname[NCBNAMSZ];
   UCHAR  ncb_name[NCBNAMSZ];
   UCHAR  ncb_rto;
   UCHAR  ncb_sto;
   void   (CALLBACK *ncb_post)( struct *NCB);
   UCHAR  ncb_lana_num;
   UCHAR  ncb_cmd_cplt;
   UCHAR  ncb_reserve[X];
   HANDLE ncb_event;
} NCB, *PNCB;


对不起我的英语不好。

最佳答案

->上使用block语法,因为block是指针(其类型为NCB*,表示“指向NCB的指针”)。

NCB结构是否包含任何指针作为字段并不重要,因为block->ncb_command不会取消引用ncb_command字段-它取消引用作为指针的block

关于c - 为什么我们在C语言中将这种语法用于NCB?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22431408/

10-15 05:49