将结构类型定义为数组是什么意思?

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)

HTN*_*TNW 6

从语法上来讲,typedef实际上是一个存储类,例如staticextern,类型别名声明的读取类似于变量声明。例如

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)

会声明VertexNodestruct vertexNode变量,但添加typedef会使其成为的别名struct vertexNode。请注意,struct vertexNode { ... }(整个事物)是一种类型,就像int。它首先定义struct vertexNode,然后再引用它。

此外,使用逗号时,数组声明的行为可能看起来很奇怪:

int x, y[5];
Run Code Online (Sandbox Code Playgroud)

声明xint,同时声明y5 ints 的数组。(函数和指针也是如此。)此网站上还有其他问题。

将所有内容放在一起,如果您删除了,您的问题将如下所示typedef

struct vertexNode
{
    VertexType data; 
    EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
Run Code Online (Sandbox Code Playgroud)

这将声明的类型struct vertexNode,变量VertexNode类型的struct vertexNode,并且阵列AdjListMAXVEX struct vertexNode第 添加成为s 别名和成为s 数组别名的typedef均值。就个人而言,我不建议这样写,但我想它很简洁。VertexNodestruct vertexNodeAdjListMAXVEX struct vertexNode