学习浙江大学数据结构时遇到了一些问题,望得到解答,谢谢
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;