递归结构体

6

我需要使用 typedef 来构建递归结构体吗?我尝试使用以下代码但没有成功:

struct teste
{
    int data;
    int data2;
    struct teste to_teste;
};

为什么要两次使用关键字struct? - gvd
5
在C语言中,你不能有直接递归的结构体,因为那将需要无限量的存储空间。但是你可以有包含指向自身指针的结构体。 - Jonathan Leffler
我尝试在结构体内部定义另一个结构体。 - user1843665
2个回答

14
为构建递归结构,你并不需要使用 typedef
你需要将结构对象转换为一个 struct 指针 对象。
像这样:
struct teste{
  int data;
  int data2;
  struct teste *to_teste;
};

@user1843665,这就是Stack Overflow的用途。 :-) - Aniket Inge
哦,我明白了。我将通过以下方式在内部结构体中引用data2: struct teste testing; testing.to_teste->data2? - user1843665
在使用 testing.to_teste->data2; 之前,请不要忘记为 to_teste 指针分配内存空间,即使用 malloc() 函数。 - Aniket Inge

6

您不能在结构体内部嵌套相同的结构体,否则该结构体的大小将变得不确定。这是不允许的。

相反,您可以在结构体内部拥有指向相同结构体的指针以实现您的目的。这样做可以工作,因为编译器知道指针的大小,而结构体现在有了确定的大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接