C 正在将结构指针初始化为null

C 正在将结构指针初始化为null,c,pointers,struct,null,C,Pointers,Struct,Null,我正在尝试使用以下节点和表构建哈希表: typedef struct Node { int key; int value; int status; } Node; typedef struct Table { int size; Node* node; } Table; structTable中的node是一个node指针,所以我认为hasht(Table*)->node应该是一个node*。我尝试将表中的所有节点*初始化为NULL,如下所示: for

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

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

typedef struct Table {
   int size;
   Node* node;
} Table;
struct
Table
中的
node
是一个
node
指针,所以我认为
hasht(Table*)->node
应该是一个
node*
。我尝试将表中的所有
节点*
初始化为
NULL
,如下所示:

for(int i=0;i<hasht->size;i++)
{
   hasht->node[i]=NULL;
}
for(int i=0;isize;i++)
{
hasht->node[i]=NULL;
}
但是,当我编译代码时,它会给我以下错误:

“从类型'void*'分配给类型'Node{aka struct Node}'时,类型不兼容” hasht->node[i]=NULL

我不明白为什么
hasht->node[I]
节点
,而不是
节点*

如何在
表*
变量中使用
表*
获取
节点*
成员?

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

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


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

确实要将结构指针初始化为NULL吗

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

for(int i=0;i<hasht->size;i++)
{
   hasht->node[i]=NULL;
}
只有一个指针,我想您需要为它分配一些内存:

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

你的索引放错地方了。你需要

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