【问题标题】:Why we use this syntax for NCB in C?为什么我们在 C 中对 NCB 使用这种语法?
【发布时间】:2014-03-16 00:14:59
【问题描述】:

我有一个关于 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;

对不起我的英语。

【问题讨论】:

  • 看起来像微软类型。强烈提示:像瘟疫一样避免它。
  • 你到底在说哪种语法?
  • 我说的是重置功能。为什么我们必须使用“->”以及为什么我们不在主函数中创建任何指针然后不使用分配?只是只有NCB块; ?
  • “不创建任何指针” - 呃,你知道&block 做了什么,对吧?
  • 是的,我知道它包含地址

标签: c pointers structure netbios ncb


【解决方案1】:

-> 语法用于block,因为block 是一个指针(它的类型是NCB*,意思是“指向NCB 的指针”)。

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

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多