将struct指针初始化为null

时间:2018-05-26 09:43:20

标签: c pointers struct null

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

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

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

TableNode指针,因此我认为hasht(Table*)->node将是Node*。我尝试将表格中的所有node*初始化为NULL,如下所示:

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

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

  

“从类型'void *'分配类型'节点{aka struct Node}'时不兼容的类型      hasht-&gt;节点[I] = NULL; “

我不明白为什么hasht->node[i]Node,而不是Node*。 如何通过Node*Table变量中获得Table*成员?

3 个答案:

答案 0 :(得分:1)

hasht->nodeNode *,它可以是指向单个Node的指针,也可以是指向Node个对象数组的指针。 hasht->node[i]然后引用此类数组中的i Node对象。请注意,根据定义,对于指针pp[i]相当于*(p + i)

如果你希望你的表有一个节点数组,你可以原样使用它,但是没有什么可以废弃,因为表中有实际的Node个对象。

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

答案 1 :(得分:0)

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

  

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

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

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

答案 2 :(得分:0)

您的索引位置错误。你需要

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