首页 > 解决方案 > 如何使用自引用结构定义(在 C 中)?

问题描述

这是我的情况。我有一个哈希表和一个节点作为我的结构。节点具有指向其他节点的指针(链表),哈希表是节点数组。我将这两种结构定义为:

typedef struct node{
    char* hashStr;
    struct node* nextNode;
}node;

typedef struct hashTable{
   int emptyNodes[16];
   node* pods[16];
}hashTable;

我已将链表中的最大节点数定义为 32。每当我将节点添加到链表时,我都会检查链表的长度是否为 32。如果长度为 32,我想添加另一个节点,我想删除链表中的第一个节点,并将新节点添加到后面,就像一个先进先出队列。

我的问题是删除第一个节点。与其删除第一个节点,我认为最合理的做法是将节点指针放在 hashTable 中(即在某个键处(因为它是节点指针数组)),只需指向下一个被引用的节点如nextNodenode struct. 我不能这样做,因为nextNode它不是struct.

我试过这个:

(*addr).pods[key] = (*addr).pods[key].nextNode;

我得到错误:

error: request for member 'nextNode' in something not a structure or union

我理解这个错误,但我不确定如何修复它。我在stackoverflow上找到了这个,但我不确定如何将它应用到我的工作中(如果我可以的话):

为什么我会从此代码中收到“对非结构或联合的成员的请求”?

标签: c

解决方案


(*addr).pods[key] = (*addr).pods[key]->nextNode;

pods一个指针数组。获得指针后,您需要取消引用它以访问底层对象。


推荐阅读