c-typedef结构节点{..}节点究竟是什么;代表



请查看此代码块:

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

在这段代码中,Node是typedef定义的struct node的同义词,还是node是struct的同义词?如果是后者,那么struct node *next;等同于struct struct *next;吗?

我是不是把事情搞得过于复杂了?

使用typedef时,会创建某种类型的别名

是的,Nodestruct node的别名。


此外,您拥有的代码相当于

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

typedef不是结构定义的一部分,而是Node定义的一部份。

Nodestruct node同义。这就是为什么(例如)不使用

struct node* p;

可以使用

Node* p;

在C语法结构中,的定义方式如下

结构或联合说明符:
 nbsp nbsp;结构或联合标识符opt{结构声明列表}

因此,要引用这个结构说明符,您需要使用它的名称。

您可以通过以下方式声明变量

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

这里CCD_ 13是类型为CCD_。struct node又是变量Node的类型说明符。

您可以省略结构说明符中的标识符。在这种情况下,该结构被称为未命名结构。然而,使用这样的结构,你不能在其定义中引用它本身。例如,您可能不写

struct 
{
    int data;
    struct *next;
    ^^^^^^^^^^^^^
} Node;

因为不知道这里指的是什么结构。

您可以使用未命名的结构作为其他结构的成员。在这种情况下,这样的结构被命名为匿名结构,其成员成为封闭结构的成员。

例如

struct A
{
   struct
   {
       int x;
       int y;
   ];
   int z;
};

该结构A具有三个成员xyz

当使用存储类说明符时,声明符是一个标识符,它是一个typedef名称,表示为标识符指定的类型。

因此,在本声明中

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

Node还不是一个对象。它是一个表示结构节点的类型名称。

因此,从现在起,您可以使用类型名称Node而不是类型说明符struct node

您不再需要到处写struct。这不仅可以节省击键次数,还可以使代码更干净,因为它提供了更多的抽象。

之类的东西

typedef struct {
  int x, y;
} Point;
Point point_new(int x, int y)
{
  Point a;
  a.x = x;
  a.y = y;
  return a;
}
typedef struct node
{
    int data;
    struct node *next;
} 
Node;

可以简单地理解这一点

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

struct [structure tag or label] {
   member definition;
   ...
   member definition;
} [one or more structure variables];  

新变量可以定义为:

struct label <variable>;

或者,如果使用typedef结构标签,则不需要每次都重复来定义新的结构变量即

typedef struct label Node;

现在Node可以用来定义新的类似类型的变量。

相关内容

  • 没有找到相关文章

最新更新