c - 如何使用自引用结构定义(在 C 中)?
问题描述
这是我的情况。我有一个哈希表和一个节点作为我的结构。节点具有指向其他节点的指针(链表),哈希表是节点数组。我将这两种结构定义为:
typedef struct node{
char* hashStr;
struct node* nextNode;
}node;
typedef struct hashTable{
int emptyNodes[16];
node* pods[16];
}hashTable;
我已将链表中的最大节点数定义为 32。每当我将节点添加到链表时,我都会检查链表的长度是否为 32。如果长度为 32,我想添加另一个节点,我想删除链表中的第一个节点,并将新节点添加到后面,就像一个先进先出队列。
我的问题是删除第一个节点。与其删除第一个节点,我认为最合理的做法是将节点指针放在 hashTable 中(即在某个键处(因为它是节点指针数组)),只需指向下一个被引用的节点如nextNode
在node struct
. 我不能这样做,因为nextNode
它不是struct
.
我试过这个:
(*addr).pods[key] = (*addr).pods[key].nextNode;
我得到错误:
error: request for member 'nextNode' in something not a structure or union
我理解这个错误,但我不确定如何修复它。我在stackoverflow上找到了这个,但我不确定如何将它应用到我的工作中(如果我可以的话):
解决方案
(*addr).pods[key] = (*addr).pods[key]->nextNode;
是pods
一个指针数组。获得指针后,您需要取消引用它以访问底层对象。