我书中的图邻接列表代码是这样给出的:
typedef struct vertexNode //vertexNode in an AdjacencyList
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
AdjList adjList; # adjList is a MAXVEX-size array
我被类型定义中的最后一行搞糊涂了:typedef struct{...} AdjList[MAXVEX]
。
我能理解的形式有:
typedef struct{
...
} VertexNode,
VertexNode AdjList[MAXVEX]; # AdjList is a MAXVEX-size array
或
struct{
...
} AdjList[MAXVEX]; # AdjList is a MAXVEX-size array
发布于 2019-11-25 09:52:14
从语法上讲,typedef
实际上是一个存储类,就像static
或extern
一样,类型别名声明读起来就像变量声明。例如。
int x;
将x
声明为int
类型的变量,而
typedef int x;
将x
声明为表示int
的类型别名。
类似地,
struct vertexNode {
...
} VertexNode;
我会将VertexNode
声明为struct vertexNode
变量,但是添加typedef
会使其成为struct vertexNode
的别名。注意,和int
一样,struct vertexNode { ... }
(整个东西)也是一种类型。它首先定义struct vertexNode
,然后引用它。
此外,在使用逗号时,数组声明的行为可能看起来很奇怪:
int x, y[5];
将x
声明为int
,同时将y
声明为5
int
的数组。(函数和指针也是这样的。)在这个网站上还有其他关于它的问题。
把所有东西放在一起,如果去掉typedef
,你的问题是这样的
struct vertexNode
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
这将声明类型struct vertexNode
、类型struct vertexNode
的变量VertexNode
和MAXVEX
struct vertexNode
s的数组AdjList
。添加typedef
意味着VertexNode
将成为struct vertexNode
的别名,而<代码>d34将成为<代码>d35<代码>d36s数组的别名。我个人不建议这样写,但我猜它很简洁。
发布于 2019-11-25 09:54:57
这是一个示例代码。
#include <stdio.h>
typedef char STR[1024];
int main() {
STR a = "1234"; // == char a[1024]
printf( "%s\n", a );
return 0;
}
我编写了一个数据类型为char
的示例。您可以将其替换为任何类或结构。
所以..。你的代码..
AdjList a
与VertexNode a[MAXVEX]
相同
https://stackoverflow.com/questions/59024134
复制相似问题