关于C中递归数据结构的问题

问题描述

如果我有一个递归结构

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

baz* myStruct;

如何访问 foobarmyStruct 值?

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

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

以及其他一些组合,但我总是遇到错误

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

解决方法

您需要转发声明baz

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

(注意额外的 baz)。

然后(使用您修改后的问题)您可以:

myStruct->bar->foo

,

您是否正在尝试编写 myStruct->bar->foobar 是一个指针,因此您需要使用 -> 取消引用它以获取其内部 foo

,

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

因为 bar 是一个指针,所以你必须使用 ->

组合:

myStruct.bar->foo

这完全基于您尝试“导航”的直接类型。

如:

baz* bar = myStruct.bar;

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