c - 为什么我们在 C 语言中使用这种 NCB 语法?

标签 c pointers structure netbios ncb

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

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/

相关文章:

c - 为什么在执行此 c 代码片段期间会转储分段核心

c - -Wformat-truncation - 我可以避免它而不是禁用警告吗?

C-传递整个结构变量

java - 为什么在大多数实时应用程序中首选 c 而不是 java

c++ - 套接字缓冲区到字符串

c++ - 取消引用 NULL 指针是否被视为未指定或未定义的行为?

java - Android zip 结构

c - 在 char* 中存储不同的结构?

c++ - 指向指针内存分配的指针,为什么会出错?

c - 如何从类型 `void*` 发送指向数组中元素的指针?