C - 将结构指针初始化为 NULL



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

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]引用此类数组中iNode对象。注意,根据定义,对于指针pp[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;(

相关内容

  • 没有找到相关文章

最新更新