浙江大学数据结构,对结构体指针的理解

学习浙江大学数据结构时遇到了一些问题,望得到解答,谢谢


typedef struct ENode *PtrToENode;
struct ENode{
Vertex V1, V2; /* 有向边<V1, V2> */
WeightType Weight; /* 权重 */
};
typedef PtrToENode Edge;

这段代码的
typedef struct ENode *PtrToENode;
typedef PtrToENode Edge;
应该怎么理解?

我能否理解为我用PtrToENode指向结构体ENode,再将PtrToENode重新命名为Edge,也就是说Edge指向了PtrToENode?
为什么要多次这样命名呢?如果要使用应该如何运用他们?

供参考:

#include <stdio.h>


// 定义顶点类型为整数
typedef int Vertex;
// 定义权重类型
typedef int WeightType;

struct ENode{
    Vertex V1, V2;     /* 有向边<V1, V2> */
    WeightType Weight; /* 权重 */
};

typedef struct ENode *PtrToENode;  // 给 struct ENode * 这种数据类型起一个新的名字,叫做 PtrToENode。以后声明指向结构体的指针时,可以直接用 PtrToENode。

typedef PtrToENode Edge;           // 给 PtrToENode 这种数据类型起一个新的名字,叫做 Edge。以后声明边时,可以直接用 Edge。

int main(void) {
    // 声明一个结构体变量
    struct ENode e1;
    // 声明一个指向结构体的指针变量
    PtrToENode p;
    // 声明一个边变量
    Edge e2;
    // 为结构体变量赋值
    e1.V1 = 1; e1.V2 = 2; e1.Weight = 10;
    // 为指针变量赋值
    p = &e1;
    // 为边变量赋值
    e2 = p;
    // 访问结构体成员
    printf("%d %d %d\n", e1.V1, e1.V2, e1.Weight);
    // 访问指针所指向的结构体成员
    printf("%d %d %d\n", p->V1, p->V2, p->Weight);
    // 访问边所代表的结构体成员
    printf("%d %d %d\n", e2->V1, e2->V2, e2->Weight);
    
    return 0;
}

供参考:

typedef struct ENode * PtrToENode;  这句就是给  struct ENode * 定义别名为:  PtrToENode。
typedef PtrToENode Edge; 这句结合上面的别名定义,PtrToENode  ==>  struct ENode *  , 
typedef PtrToENode Edge; ===> typedef  struct ENode * Edge;