在 struct 内部使用 struct 关键字

问题描述 投票:0回答:4
typedef struct node
{
    int n;
    struct node* next;
}
node;

在上面的代码中,

struct node* next
里面有
struct node
。我不明白这句话的意思。

c struct
4个回答
5
投票

在代码中,

struct node* next
内有
struct node
。我 不明白这句话的意思。

说明:

A node 是一个通用术语,用于指称自引用结构(点击链接了解更多)

按照定义,

A 自引用结构是一种典型的结构,其定义有一个或 更多的是它的成员作为指向它自己类型的指针。

在您的代码中

next
是结构体
struct node
的成员,它是指向其自身类型的指针,因此您将其视为在结构内部以这种方式指向自身的指针:

struct node* next;

这就是为什么在 struct 内部使用 struct 关键字的原因


使用自引用结构的目的

自引用结构对于构建诸如链表之类的数据结构非常有帮助......事实上,变量

next
是在中的节点之间建立链接非常有用的成员。链表:)


0
投票

struct node*
(注意
*
)是指向*
指针
(
struct node
)。这意味着一个节点可以通过指针连接到另一个节点,而不包含另一个节点。

这称为“链表”结构。我发现了一个斯坦福大学教程,看起来它相当全面地涵盖了该主题。


0
投票

简单来说,就是next也和node有同样的结构。所以 next 也会有一个字段 int n 和另一个 next .. 而且这是动态的,所以你不必事先分配任何内存.. 你可以继续添加任意数量的节点(你仍然需要分配内存但到每个节点 - 搜索如何使用 malloc 为 struct node 分配内存) 由于它是指针类型( struct node* next ),这意味着您可以将下一个节点的地址存储到其中并链接节点。 请参阅链表实现以更好地理解。 我希望它有帮助:)


0
投票

回答标题:在

C
中,所有非标准类型都需要以
struct
关键字开头:

#include <stdint.h>
typedef uint8_t u8;
typedef uint32_t u32;

struct memory_arena {
    size_t size;
    u8 *base;
    size_t used;
    u32 _savePointCount;
    size_t _savePoints[8];
};

struct application_state {
#if 1
    struct memory_arena globalArena; //<---
#else
    memory_arena globalArena; //Valid C++
#endif
};

如果是 C 风格的 C++,你可能会发现这是混合和匹配的,因为它不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.