c - 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,应该可以工作。
我究竟做错了什么?
解决方案
有什么不对的是,struct node
并且struct HashNode
是不同的类型。
node
typedef 名称是 的别名,与.struct HashNode
无关struct node
。
typedef struct HashNode {
int data;
struct node *next; // this should be struct HashNode
} node;
我建议使用struct node
instead of struct HashNode
,反之亦然:对 struct 标签和 typedef 名称使用相同的标识符:
typedef struct HashNode {
int data;
struct HashNode *next; // this should be struct HashNode
} HashNode;
如果struct HashNode
和HashNode
是相同的 via typedef
,并且没有HashNode
引入其他标识符,那么您就不太可能遇到这种混淆。
推荐阅读
- r - Dividing column values in group and finding standard deviation of that group
- android - 在 Kotlin 中使用 Recycler 视图显示 Cloud Firestore 中的数据
- javascript - Eslint react/jsx-one-expression-per-line:允许变量和 JSX 字符串在同一行,但不允许元素
- go - 尝试使用指针字段初始化结构时出现 nil 指针取消引用错误
- apache-spark - 如何提取数据集内容 n 行 n 行?
- r - 从 emacs 键绑定关闭 R 绘图窗口
- java - 春季启动+码头工人+ kubernetes
- c++ - ZeroMQ PubSub 使用 inproc 套接字永远挂起
- swift - 在 iOS Swift 中流式传输 Spotify preview_url
- pm2 - PM2 1个月后自动删除进程~