Почему мы используем этот синтаксис для NCB в C?

У меня есть вопрос о 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) ;
   };
}

Структура НЦБ выглядит следующим образом:

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;

Извините за мой английский.

1 ответ

Решение

-> синтаксис используется на block так как block это указатель (его тип NCB*, что означает "указатель на NCB").

Будь или нет NCB Структура содержит любые указатели, так как поля не имеют значения, потому что block->ncb_command не разыменовывает ncb_command поле - это разыменование block, который является указателем.

Другие вопросы по тегам