3

听起来非常复杂,但这是一个简单的概念。假设你有一些结构“foo”,如果它的成员是指向另一个 foo 结构的指针(如链表)

这似乎有效。

struct foo {
   struct foo* ptr;
};

但是如果我想让 foo 成为一种类型呢?

就像我将如何执行以下操作?

typedef struct foo {
   foo* ptr;
} foo;

ptr 的声明失败,因为 foo 还不是限定符。

4

2 回答 2

5

转发声明定义。

typedef struct foo {
    struct foo* ptr
} foo;

或者您可以转发声明类型声明。

typedef struct node_t node_t;

typedef struct node_t {
   node_t *next;
} node_t;
于 2014-08-04T00:17:49.093 回答
1

为了进一步实施 Casper Von B 的答案:

如果结构中有一些变量类型,如 int 和 char 数组,则需要使用 malloc:

node_t *ptr = malloc(sizeof(node_t));

您可以使用 -> 运算符和 . 运算符选择变量:

ptr -> x = 12;

然后,完成后使用 free() 进行垃圾收集:

free(ptr);

我的最后一点是您可以继续将结构与指针链接在一起,然后遍历它们。

于 2014-08-04T00:56:47.233 回答