如何使用自我引用结构定义(在C中)?

时间:2018-10-26 15:09:23

标签: c

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

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

我已将链表中的最大节点数定义为32。每当我向链表中添加节点时,我都会检查链表的长度是否为32。如果长度为32,则我要添加另一个节点,我想删除链表中的第一个节点,然后将新节点添加到后面,例如FIFO队列。

我的问题是删除第一个节点。我认为最合理的事情是删除哈希表中的节点指针(即位于某个键(因为它是节点指针的数组)),而不是删除第一个节点,只是指向下一个被引用的节点如typedef struct node{ char* hashStr; struct node* nextNode; }node; typedef struct hashTable{ int emptyNodes[16]; node* pods[16]; }hashTable; 中的nextNode。不过我无法执行此操作,因为node struct不是nextNode

我尝试过:

struct

我得到了错误:

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

我了解该错误,但不确定如何解决。我在stackoverflow上找到了它,但是我不确定如何将其应用于我的工作(如果可以的话):

Why do I get "request for member in something not a struct or union" from this code?

3 个答案:

答案 0 :(得分:2)

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

pods是一个指针数组。一旦有了指针,就需要取消引用它以访问基础对象。

答案 1 :(得分:1)

更改此:

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

对此:

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

因为pods[key]的类型为node*,即指向node指针

答案 2 :(得分:1)

这里

node* pods[16];

pods[key]node*类型。使用nextNode访问pods[key]时,请使用箭头->运算符。对于例如

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