【问题标题】:Can a struct have a member which is a pointer to a struct of the same type?结构可以有一个成员,它是指向相同类型结构的指针吗?
【发布时间】:2014-08-04 00:05:47
【问题描述】:

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

这似乎有效。

struct foo {
   struct foo* ptr;
};

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

比如我将如何执行以下操作?

typedef struct foo {
   foo* ptr;
} foo;

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

【问题讨论】:

  • 你要的是c还是c++?请选择一个!
  • 放大之前的评论:C和C++在这方面不同,所以两者得到不同的答案。
  • 看起来像 C,修改了标签,如果您有其他意思,请随时恢复。
  • 没有什么能阻止你做typedef struct foo { struct foo *ptr; } foo; - 你可以为同一个结构同时拥有struct _typedef 名称。
  • 你是新的C 程序员吗?添加分号应该是一种反射。

标签: c pointers struct qualifiers


【解决方案1】:

转发声明定义。

typedef struct foo {
    struct foo* ptr
} foo;

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

typedef struct node_t node_t;

typedef struct node_t {
   node_t *next;
} node_t;

【讨论】:

【解决方案2】:

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

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

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

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

ptr -> x = 12;

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

free(ptr);

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

【讨论】:

    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多