首页 > 解决方案 > C 中的 HashTable,无法添加节点,出现不兼容的指针类型错误

问题描述

typedef struct HashNode{
    int data;
    struct node *next;
}node;
node *addThisNode = malloc(sizeof(node)); 
        addThisNode->data = scannedInt;
        addThisNode->next = NULL;
node **hashTable = malloc(10000*sizeof(node));
    for (int i =0 ; i < 10000; i ++){
        hashTable[i] = NULL;
    }

void append(node **hashTable, node *addThisNode, int hashedValue){
    node *ptr = hashTable[hashedValue];
    while (ptr->next != NULL){
        ptr = ptr->next;
    }
    ptr->next = addThisNode;
}

以下是 C 中的哈希表。我将表定义为指向节点的指针数组。在发生冲突的情况下,我通过 append 函数实现了节点链接。现在,当我在 append 函数中增加指针时,我得到一个“来自不兼容指针类型的赋值”错误,当我尝试将 ptr->next 分配给 addThisNode 时出现同样的错误。我现在的理解是,通过执行 "ptr->next = addThisNode" ,它们是相同的类型,Node,应该可以工作。

我究竟做错了什么?

标签: cpointershashhashtable

解决方案


有什么不对的是,struct node并且struct HashNode是不同的类型。

nodetypedef 名称是 的别名,与.struct HashNode无关struct node

typedef struct HashNode {
  int data;
  struct node *next; // this should be struct HashNode
} node;

我建议使用struct nodeinstead of struct HashNode反之亦然:对 struct 标签和 typedef 名称使用相同的标识符:

typedef struct HashNode {
  int data;
  struct HashNode *next; // this should be struct HashNode
} HashNode;

如果struct HashNodeHashNode是相同的 via typedef,并且没有HashNode引入其他标识符,那么您就不太可能遇到这种混淆。


推荐阅读