这个结构发生了什么?

时间:2015-03-24 18:31:07

标签: c++ pointers struct typedef

我真的很想知道struct中这个C++发生了什么:

typedef struct nod{
int nr;
nod* next;
}NOD; 

我知道struct是什么以及目的是什么,但我没有意识到为什么“点头”和“NOD”是重复的。结构内部的点头是怎么回事?

此代码来自链式列表。

如果有人可以帮助我,我会很感激!!

5 个答案:

答案 0 :(得分:2)

typedef a b创建别名,以便您可以通过撰写a来引用b。因此typedef struct nod {...} NOD允许您将struct nod称为NOD

如果没有typedef,即struct nod {...};,您必须在C代码中将结构称为struct nod,而在C ++中,您仍然可以简单地将其称为nod 1}}。

nod* next声明结构的成员变量。该变量的类型是指向nod的指针,其名称为next

答案 1 :(得分:1)

NOD和点头不一样。 NOD是一个typedef,它基本上意味着"结构的名称"。因此,您可以通过键入以下内容来定义它的对象:

NOD node;

然而,nod*是不同的。它是nod类型的指针,它是您的结构。这可以用于将不同的struct对象链接在一起并创建一个链接列表,如下所示:

Nod node1;
Nod node2;
Nod node3;

node1->next = node2;
node2->next = node3;

答案 2 :(得分:0)

这在链接的数据结构中定义了节点。每个节点都包含指向另一个节点(相同类型)的指针。

答案 3 :(得分:0)

typedef将NOD定义为类型struct node的同义词。因此,之后您可以使用NOD定义struct type node,NOD可以作为struct node的盟友。现在,您可以声明一个新的struct node,但声明更少 -

NOD node1, node2;   

node*内的NOD指针用于指向另一个struct node。实际上,这个struct node数据结构用于表示链表的节点。

答案 4 :(得分:0)

与以下内容相同:

typedef struct nod NOD;
struct nod {
  int nr;
  nod* next;
};

它是一个链表结构,其结构成员反向引用(指向)它自己的类型。

这是一个旧的C约定(忽略struct关键字),而在C ++中,这里不太需要typedef。