【问题标题】:Question regarding recursive data structures in C关于C中递归数据结构的问题
【发布时间】:2021-08-17 04:12:17
【问题描述】:

如果我有一个递归结构

typdef struct {
    int foo;
    baz* bar;
} baz;

baz* myStruct;

如何访问myStructbarfoo 值?

以“猜测和测试”的方式,我已经尝试过

myStruct->bar.foo;
(*myStruct->bar).foo;
(*(*(myStruct)->bar).foo);

还有其他一些组合,但我总是出错。

显然,我对该主题的了解有限。欢迎任何建议。谢谢!

【问题讨论】:

  • C 并不是真正的“猜测和测试”语言。这是你读一本书并解释事情的地方。 C 本身很古怪,但大多数时候并不那么棘手。
  • @lurker 这是我的一个错误。我的意思是 myStruct 是一个指针。
  • 那么myStruct->bar->foo since baz`是一个指向结构的指针。或取消引用为(*(myStruct->bar)).foo。您确实需要说明您的错误是什么,因为您的自引用声明不太正确(如答案之一所示)。

标签: c recursion data-structures


【解决方案1】:

你想写myStruct->bar->foo吗? bar 是一个指针,因此您需要使用 -> 取消引用它以获取其内部 foo

【讨论】:

  • 这是我最初的想法,但我得到了错误error: request for member 'foo' in something not a structure or union
  • 我不断收到[Program exited with exit code -11]。我真的不知道网络工具是如何工作的,但是我在哪里查看打印输出?
  • 即输出,变量未初始化。如您所见,您声称它无法编译,但确实如此。
【解决方案2】:

由于myStruct 不是指针,任何属性访问都使用.

由于bar 是一个指针,你必须使用->

综合:

myStruct.bar->foo

这一切都基于您尝试“导航”通过的直接类型。

如:

baz* bar = myStruct.bar;

这是一个有效的赋值,指向指针的指针,所以逻辑上下一步是->

【讨论】:

  • 抱歉,我的意思是 myStruct 是一个指针。我已经相应地编辑了帖子。
  • 然后是-> 两次,同样的规则适用。
【解决方案3】:

您需要转发声明baz:

typedef struct baz {
    int foo;
    struct baz* bar;
} baz;

(注意额外的baz)。

然后(用你修改过的问题)你可以这样做:

myStruct->bar->foo

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多