0

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;

私の英語でごめんなさい。

4

1 に答える 1

0

->構文が使用されるのは、 がポインターでblockあるためblockです (その型はNCB*、「へのポインター」を意味するNCBです)。

はフィールドを逆参照しないNCBため、構造体にフィールドとしてポインターが含まれているかどうかは問題ではありません。ポインターである を逆参照します。block->ncb_commandncb_commandblock

于 2014-03-16T00:50:13.550 に答える