我试图使用以下节点和表构建哈希表:
typedef struct Node {
int key;
int value;
int status;
} Node;
typedef struct Table {
int size;
Node* node;
} Table;node in struct Table是一个Node指针,所以我认为hasht(Table*)->node应该是Node*。我尝试将表中的所有node*初始化为NULL,如下所示:
for(int i=0;i<hasht->size;i++)
{
hasht->node[i]=NULL;
}但是,当我编译代码时,它会给出以下错误:
“当从类型‘void*’hasht->nodei=NULL分配给‘Node {aka struct Node}’类型时,不兼容类型;”
我不明白为什么hasht->node[i]是Node而不是Node*。如何使用Node*在Table变量中获得Table*成员
发布于 2018-05-26 09:48:31
hasht->node是一个Node *,它可以是指向单个Node的指针,也可以是指向Node对象数组的指针。然后,hasht->node[i]引用这样一个数组中的ith Node对象。注意,根据定义,对于指针p,p[i]等同于*(p + i)。
如果您希望您的表有一个节点数组,您可以按原样使用它,但是没有什么可以空出,因为表中有实际的Node对象。
另一方面,如果出于某种原因需要指向节点的指针数组,则需要将表成员更改为Node **node。然后,您可以让它指向指向Node的一个指针数组,这些指针确实可以单独空出(因为那时hasht->node[i]将是一个Node * )。您将得到内存碎片,并成为缓存-不友好,尽管。
发布于 2018-05-26 10:05:34
确定要将结构指针初始化为NULL吗?
我尝试将表中的所有节点*初始化为空,如下所示:
只有一个指针,我想您需要为它分配一些内存:
hasht->node = calloc(hasht->size, sizeof(Node));发布于 2018-05-26 17:46:13
你的索引放错地方了。你需要
hasht[i]->node=NULL; (而不是hasht->node[i]=NULL;)
https://stackoverflow.com/questions/50541397
复制相似问题