我正在尝试使用以下节点和表构建哈希表:
typedef struct Node {
int key;
int value;
int status;
} Node;
typedef struct Table {
int size;
Node* node;
} Table;
struct node
中的 Table
是Node
指针,因此我认为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*
成员?
答案 0 :(得分:1)
hasht->node
是Node *
,它可以是指向单个Node
的指针,也可以是指向Node
个对象数组的指针。 hasht->node[i]
然后引用此类数组中的i
Node
对象。请注意,根据定义,对于指针p
,p[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;
)