【问题标题】:initializing struct pointer to null将结构指针初始化为空
【发布时间】:2018-05-26 09:43:19
【问题描述】:

我正在尝试构建一个哈希表,使用以下节点和表:

typedef struct Node {
   int key;
   int value;
   int status;     
} Node;

typedef struct Table {
   int size;
   Node* node;
} Table;

node in struct Table 是一个Node 指针,所以我认为hasht(Table*)->node 将是一个Node*。我尝试将表中的所有node* 初始化为NULL,如下所示:

for(int i=0;i<hasht->size;i++)
{
   hasht->node[i]=NULL;
}

但是,当我编译代码时,它给了我这个错误:

" 从类型‘void *’分配给类型‘Node {aka struct Node}’时不兼容的类型 哈希->节点[i]=NULL; "

我不明白为什么hasht-&gt;node[i]Node,而不是Node*。 如何使用Table*Table 变量中获取Node* 成员?

【问题讨论】:

    标签: c pointers struct null


    【解决方案1】:

    hasht-&gt;node 是一个Node *,它可以是指向单个Node 的指针,也可以是指向Node 对象数组的指针。然后hasht-&gt;node[i] 指的是这样一个数组中的ith Node 对象。请注意,根据定义,对于指针pp[i] 等价于*(p + i)

    如果你想让你的表有一个节点数组,你可以按原样使用它,但是没有什么可以清空的,因为表中有实际的 Node 对象。

    另一方面,如果出于某种原因您需要一个指向节点的指针数组,则需要将表成员更改为Node **node。然后,您可以让它指向指向Node 的指针数组,该数组确实可以单独清空(因为hasht-&gt;node[i] 将是Node *)。但是,您会得到内存碎片并且对缓存不友好。

    【讨论】:

      【解决方案2】:

      您确定要将结构指针初始化为 NULL 吗?

      我尝试将表中的所有节点 * 初始化为 NULL,如下所示:

      只有一个指针,我想你需要为它分配一些内存:

      hasht->node = calloc(hasht->size, sizeof(Node));
      

      【讨论】:

        【解决方案3】:

        您的索引放错了位置。你需要

        hasht[i]-&gt;node=NULL;(而不是hasht-&gt;node[i]=NULL;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多