听起来非常复杂,但这是一个简单的概念。假设你有一些结构“foo”,如果它的成员是指向另一个 foo 结构的指针(如链表)
这似乎有效。
struct foo {
struct foo* ptr;
};
但是如果我想让 foo 成为一种类型呢?
就像我将如何执行以下操作?
typedef struct foo {
foo* ptr;
} foo;
ptr 的声明失败,因为 foo 还不是限定符。
听起来非常复杂,但这是一个简单的概念。假设你有一些结构“foo”,如果它的成员是指向另一个 foo 结构的指针(如链表)
这似乎有效。
struct foo {
struct foo* ptr;
};
但是如果我想让 foo 成为一种类型呢?
就像我将如何执行以下操作?
typedef struct foo {
foo* ptr;
} foo;
ptr 的声明失败,因为 foo 还不是限定符。
转发声明定义。
typedef struct foo {
struct foo* ptr
} foo;
或者您可以转发声明类型声明。
typedef struct node_t node_t;
typedef struct node_t {
node_t *next;
} node_t;
为了进一步实施 Casper Von B 的答案:
如果结构中有一些变量类型,如 int 和 char 数组,则需要使用 malloc:
node_t *ptr = malloc(sizeof(node_t));
您可以使用 -> 运算符和 . 运算符选择变量:
ptr -> x = 12;
然后,完成后使用 free() 进行垃圾收集:
free(ptr);
我的最后一点是您可以继续将结构与指针链接在一起,然后遍历它们。