use*_*531 5 c arrays struct typedef
我的书中的图形邻接表代码由下式给出:
typedef struct vertexNode //vertexNode in an AdjacencyList
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
AdjList adjList; # adjList is a MAXVEX-size array
Run Code Online (Sandbox Code Playgroud)
我对typedef:的最后一行感到困惑typedef struct{...} AdjList[MAXVEX]。
我能理解的形式是:
typedef struct{
...
} VertexNode,
VertexNode AdjList[MAXVEX]; # AdjList is a MAXVEX-size array
Run Code Online (Sandbox Code Playgroud)
要么
struct{
...
} AdjList[MAXVEX]; # AdjList is a MAXVEX-size array
Run Code Online (Sandbox Code Playgroud)
从语法上来讲,typedef实际上是一个存储类,例如static或extern,类型别名声明的读取类似于变量声明。例如
int x;
Run Code Online (Sandbox Code Playgroud)
声明x为类型的变量int,而
typedef int x;
Run Code Online (Sandbox Code Playgroud)
声明x为类型别名int。
同样,
struct vertexNode {
...
} VertexNode;
Run Code Online (Sandbox Code Playgroud)
会声明VertexNode为struct vertexNode变量,但添加typedef会使其成为的别名struct vertexNode。请注意,struct vertexNode { ... }(整个事物)是一种类型,就像int。它首先定义struct vertexNode,然后再引用它。
此外,使用逗号时,数组声明的行为可能看起来很奇怪:
int x, y[5];
Run Code Online (Sandbox Code Playgroud)
声明x为int,同时声明y为5 ints 的数组。(函数和指针也是如此。)此网站上还有其他问题。
将所有内容放在一起,如果您删除了,您的问题将如下所示typedef:
struct vertexNode
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
Run Code Online (Sandbox Code Playgroud)
这将声明的类型struct vertexNode,变量VertexNode类型的struct vertexNode,并且阵列AdjList的MAXVEX struct vertexNode第 添加成为s 别名和成为s 数组别名的typedef均值。就个人而言,我不建议这样写,但我想它很简洁。VertexNodestruct vertexNodeAdjListMAXVEX struct vertexNode