为了账号安全,请及时绑定邮箱和手机立即绑定

自引用结构定义?

自引用结构定义?

C
小怪兽爱吃肉 2019-07-09 13:18:45
自引用结构定义?我写C的时间不长,所以我不确定该如何做这些递归的事情.我希望每个单元格包含另一个单元格,但是我会得到一个错误,类似于“字段‘子”有不完整的类型“。出什么事啦?typedef struct Cell {   int isParent;   Cell child;} Cell;
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

显然,一个单元格不能包含另一个单元格,因为它变成了一个永无止境的递归.

但是,单元格可以包含指向另一个单元格的指针。

typedef struct Cell {
  bool isParent;
  struct Cell* child;} Cell;


查看完整回答
反对 回复 2019-07-09
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

在C中,您不能引用您正在创建的类型-使用结构本身。您必须使用结构名称,如下所示:

#include <stdio.h>#include <stdlib.h>typedef struct Cell {
  int cellSeq;
  struct Cell* next; /* 'tCell *next' will not work here */} tCell;int main(void) {
    int i;
    tCell *curr;
    tCell *first;
    tCell *last;

    /* Construct linked list, 100 down to 80. */

    first = malloc (sizeof (tCell));
    last = first;
    first->cellSeq = 100;
    first->next = NULL;
    for (i = 0; i < 20; i++) {
        curr = malloc (sizeof (tCell));
        curr->cellSeq = last->cellSeq - 1;
        curr->next = NULL;
        last->next = curr;
        last = curr;
    }

    /* Walk the list, printing sequence numbers. */

    curr = first;
    while (curr != NULL) {
        printf ("Sequence = %d\n", curr->cellSeq);
        curr = curr->next;
    }

    return 0;}

虽然在标准中它可能比这个复杂得多,但是您可以将它看作是编译器知道的struct Cell的第一行typedef但不知道tCell直到最后一行:-)我就是这样记住这条规则的。


查看完整回答
反对 回复 2019-07-09
?
慕容森

TA贡献1853条经验 获得超18个赞

有一种方法可以解决这个问题:

struct Cell {
  bool isParent;
  struct Cell* child;};struct Cell;typedef struct Cell Cell;

如果您这样声明它,它会正确地告诉编译器,structCell和plan-ol‘-cell是相同的。所以你可以像正常人一样使用细胞。但是,在初始声明本身中仍然必须使用structCell。


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 391 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信