我正在尝试使用以下节点和表构建哈希表:
typedef struct Node {
int key;
int value;
int status;
} Node;
typedef struct Table {
int size;
Node* node;
} Table;
结构Table
中的node
是一个Node
指针,所以我认为hasht(Table*)->node
会是一个Node*
。我尝试初始化表中的所有node*
,如下所示NULL
:
for(int i=0;i<hasht->size;i++)
{
hasht->node[i]=NULL;
}
但是,当我编译代码时,它给了我这个错误:
"从类型">void *"分配给类型"节点{又名结构节点}"时不兼容的类型 hasht->node[i]=NULL;">
我不明白为什么hasht->node[i]
是Node
,而不是Node*
。 如何使用Table*
在Table
变量中获取Node*
成员?
hasht->node
是一个Node *
,它可以是指向单个Node
的指针,也可以是指向Node
对象数组的指针。 然后hasht->node[i]
引用此类数组中i
个Node
对象。注意,根据定义,对于指针p
,p[i]
等效于*(p + i)
。
如果您希望表具有节点数组,则可以按原样使用它,但是没有什么可以清空的,因为表中有实际的Node
对象。
另一方面,如果出于某种原因想要指向节点的指针数组,则需要将表成员更改为Node **node
。然后,你可以让它指向一个指向Node
的指针数组,这些指针确实可以单独清空(因为那时hasht->node[i]
会是一个Node *
(。但是,您会遇到内存碎片并且对缓存不友好。
是否确实要将结构指针初始化为 NULL?
我尝试将表中的所有节点*初始化为NULL,如下所示:
只有一个指针,我想你需要为它分配一些内存:
hasht->node = calloc(hasht->size, sizeof(Node));
您的索引位于错误的位置。你需要
hasht[i]->node=NULL;
(而不是hasht->node[i]=NULL;
(