typedef struct node
{
int n;
struct node* next;
}
node;
在上面的代码中,
struct node* next
里面有struct node
。我不明白这句话的意思。
在代码中,
内有struct node* next
。我 不明白这句话的意思。struct node
说明:
A node 是一个通用术语,用于指称自引用结构。(点击链接了解更多)
按照定义,
A 自引用结构是一种典型的结构,其定义有一个或 更多的是它的成员作为指向它自己类型的指针。
在您的代码中
next
是结构体struct node
的成员,它是指向其自身类型的指针,因此您将其视为在结构内部以这种方式指向自身的指针:
struct node* next;
这就是为什么在 struct 内部使用 struct 关键字的原因
使用自引用结构的目的:
自引用结构对于构建诸如链表之类的数据结构非常有帮助......事实上,变量
next
是在中的节点之间建立链接非常有用的成员。链表:)
struct node*
(注意*
)是指向*
的指针(
struct node
)。这意味着一个节点可以通过指针连接到另一个节点,而不包含另一个节点。
这称为“链表”结构。我发现了一个斯坦福大学教程,看起来它相当全面地涵盖了该主题。
简单来说,就是next也和node有同样的结构。所以 next 也会有一个字段 int n 和另一个 next .. 而且这是动态的,所以你不必事先分配任何内存.. 你可以继续添加任意数量的节点(你仍然需要分配内存但到每个节点 - 搜索如何使用 malloc 为 struct node 分配内存) 由于它是指针类型( struct node* next ),这意味着您可以将下一个节点的地址存储到其中并链接节点。 请参阅链表实现以更好地理解。 我希望它有帮助:)
回答标题:在
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++,你可能会发现这是混合和匹配的,因为它不是必需的。