【问题标题】:Could you explain pointers and recursive structs [closed]你能解释一下指针和递归结构吗[关闭]
【发布时间】:2014-09-29 03:55:25
【问题描述】:

你能解释一下结构中的指针是什么意思吗?递归结构如何有用?你能帮我解释一下这段代码吗?它在记忆中的表现如何? 这是我的 C 代码:

struct State { 
unsigned long Out; 
unsigned long Time; //ms 
const struct State *Next[4];}; 

【问题讨论】:

  • 包含指向相同类型结构的指针的结构没有递归。您可以简单地初始化此指针以指向相同类型的另一个结构,从而创建这些结构的链表。
  • how can recursive structure be useful?: 链表、树、图等等。
  • @40two 我没完全理解你
  • “递归结构”用作非常流行的数据结构(如链接列表、树和图)的构建元素(即节点)。

标签: c++ c recursion struct fsm


【解决方案1】:

在这种情况下,Next 可以在只读地址中保存 4 个指向相同类型 (struct State) 对象的指针(4 个不可修改的引用)。

一个例子:

#include <stdio.h>
#include <stdlib.h>

struct State { 
    unsigned long Out; 
    unsigned long Time; //ms 
    const struct State *Next[4];
}; 

void fn(struct State *data)
{
    /* data->Next[0]->Out = 1; error: assignment of member ‘Out’ in read-only object */
    for (int i = 0; i < 4; i++) {
        printf("%ld %ld\n", data->Next[i]->Out, data->Next[i]->Time);
        free((struct State *)data->Next[i]); /* cast to non const */
    }
}

int main(void)
{
    struct State data;
    struct State *next;

    for (int i = 0; i < 4; i++) {
        next = malloc(sizeof(*next));
        next->Out = i;
        next->Time = i * 10;
        data.Next[i] = next;
    }
    fn(&data);
    return 0;
}

【讨论】:

  • 这正是我所需要的,非常感谢 :)
【解决方案2】:

您可以参考链表示例来了解自引用指针的使用。

const struct State *Next[4]; array of pointer. 

所以它可以用来指向4个自引用地址。

在下面的链接中找到链表示例

http://www.thegeekstuff.com/2012/08/c-linked-list-example/

【讨论】:

  • 你指的是哪个列表?
  • 链表数据结构。
【解决方案3】:

这不是“递归struct”。包含指向State 的指针与拥有成员State 不同。以下代码会报错:

// error!!
struct State {
    unsigned long IN;
    State someState;
};

因为内部 State 成员必须在其中包含另一个 State 成员,依此类推,深入递归兔子洞。

然而,指向结构的指针可能很有用。考虑State 结构的链表的示例实现。从概念上讲,它看起来像这样:

-----  ---> -----
| 9 |  |    | 5 |
-----  |    -----
| 5 |  |    | 4 |
-----  |    -----
|  -|---    |  -|----->
-----       -----

那里的第二个成员包含指向另一个结构的指针。现在,在 C++ 中,您通常有其他选择。例如,对于链表,您可以这样做:

#include <list>

struct State {
    unsigned long IN,
    unsigned long OUT,
};

std::list<State> my_list;

【讨论】:

  • 能否详细解释一下?
  • 你不明白哪一部分?希望我能提供帮助。
  • 非常感谢@Nasser,一个人刚刚回答了我:) 谢谢你的努力。
【解决方案4】:

如果结构中有指针,则表示该指针称为“自引用指针”。该指针将指向自己的结构。

struct State { 
unsigned long Out; 
unsigned long Time; //ms 
const struct State *Next[4]; // array of 4 self referential pointer.
}; 

这些*Next[4] 将指向自己的结构。包含自引用指针的结构称为“自引用结构”。

自引用结构用于创建链表、堆栈等数据结构。包含对自身的引用的结构。这种情况常见于描述链表节点的结构中。每个节点都需要对链中下一个节点的引用。

struct linked_list_node { 
int data; 
struct linked_list_node *next; // <- self reference 
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2017-08-07
    • 2010-09-12
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多