在C中声明结构

在C中声明结构,c,struct,C,Struct,为什么我们有头?这和你做的不同(更好?)吗 struct node { int data; struct node *next; }*head; 第一个版本声明了一个类型(struct node),以及一个变量head,它是指向struct node的指针。所有列表都需要一个标题,这很有帮助 第二个声明head作为(否则未命名的)struct的类型名。它实际上不会编译,因为内部的struct node*next引用了一个不存在的类型。第一个版本声明了一个类型(struct nod

为什么我们有头?这和你做的不同(更好?)吗

struct node
{
   int data;
   struct node *next;
 }*head;

第一个版本声明了一个类型(
struct node
),以及一个变量
head
,它是指向
struct node
的指针。所有列表都需要一个标题,这很有帮助


第二个声明
head
作为(否则未命名的)
struct
的类型名。它实际上不会编译,因为内部的
struct node*next
引用了一个不存在的类型。

第一个版本声明了一个类型(
struct node
),以及一个变量
head
,它是指向
struct node
的指针。所有列表都需要一个标题,这很有帮助


第二个声明
head
作为(否则未命名的)
struct
的类型名。它实际上不会编译,因为内部
struct node*next
引用了一个不存在的类型。

第一节定义了一个变量
head
,它是指向
结构节点的指针。它可以为空,表示链表中没有元素

第二个块只是声明了一个名为
head
的类型。这根本不是一个变量。并且它不会编译,因为它的
next
字段
struct node
的类型不存在

你可能想要

 typedef struct
{
  int data;
  struct node *next;
}head;

此表单声明了两种类型,
struct node
node
(相同),并定义了一个变量
head
。我选择不带typedef的第1个表单,因为它更简单,并且无论如何都不能在结构的
next
字段中引用typedef。

第一部分定义了一个变量
head
,它是指向
结构节点的指针。它可以为空,表示链表中没有元素

第二个块只是声明了一个名为
head
的类型。这根本不是一个变量。并且它不会编译,因为它的
next
字段
struct node
的类型不存在

你可能想要

 typedef struct
{
  int data;
  struct node *next;
}head;

此表单声明了两种类型,
struct node
node
(相同),并定义了一个变量
head
。我选择不带typedef的第1个表单,因为它更简单,并且无论如何都不能在结构的
next
字段中引用typedef。

在第一个示例中,您定义了
struct
,但还声明
head
变量是指向此类
struct
的指针

在第二个示例(
typedef
)中,您只声明了一些类型同义词(但是
没有变量!)

在第一个示例中,您定义了
struct
,但也将
变量声明为指向此类
struct
的指针

在第二个示例(
typedef
)中,您只声明了一些类型同义词(但是 没有变量!)

在上面的代码中,您将对象head声明为指针,因此为了访问其元素数据,您需要使用->操作符,例如head->data=4;等等

可以创建节点以附加头指针

struct node
{
   int data;
   struct node *next;
 }*head;
其中,与此代码中一样,您创建的每个节点都将属于头部类型。当您删除头部节点时,将产生问题。如果您编写用于删除头部的链表代码,则无法重新定义新头部

在前面的代码中,可以通过在更新头之后更新结构中的下一个元素来更改指针头->在前面的代码中,我们可以轻松地删除上一个头而不丢失新头

typedef struct
{
  int data;
  struct node *next;
}head;
在上面的代码中,您将对象head声明为指针,因此为了访问其元素数据,您需要使用->操作符,例如head->data=4;等等

可以创建节点以附加头指针

struct node
{
   int data;
   struct node *next;
 }*head;
其中,与此代码中一样,您创建的每个节点都将属于头部类型。当您删除头部节点时,将产生问题。如果您编写用于删除头部的链表代码,则无法重新定义新头部

在前面的代码中,指针可以通过在更新头后更新其结构中的下一个元素来更改->在前面的代码中,我们可以轻松地删除前一个头而不丢失新的头

我认为从“样式”的意义上来说更好。。。我的意思是,“node”将在一个可能的“TAD”中使用,因此“head”(通常在处理列表时)需要是一个指针,所以在定义struct节点时声明它,而不是稍后在代码中显式地执行它。我认为从“样式”的意义上来说更好。。。我的意思是,“node”将在一个可能的“TAD”中使用,因此“head”(通常在处理列表时)需要是一个指针,所以在定义struct节点时声明它,而不是稍后在代码中显式地执行它。
typedef struct
{
  int data;
  struct node *next;
}head;