[英]What does it mean to typedef a struct as an array?
我书中的图邻接表代码由下式给出:
typedef struct vertexNode //vertexNode in an AdjacencyList
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
AdjList adjList; # adjList is a MAXVEX-size array
我对 typedef 中的最后一行感到困惑: 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
从语法上讲, typedef
实际上是一个存储类,就像static
或extern
,类型别名声明读起来像变量声明。 例如
int x;
将x
声明为int
类型的变量,而
typedef int x;
将x
声明为类型别名,表示int
。
相似地,
struct vertexNode {
...
} VertexNode;
会将VertexNode
声明为struct vertexNode
变量,但添加typedef
使其成为struct vertexNode
的别名。 请注意, struct vertexNode { ... }
(整个事物)是一种类型,就像int
一样。 它首先定义struct vertexNode
,然后引用它。
此外,当您使用逗号时,数组声明可能会出现奇怪的行为:
int x, y[5];
将x
声明为一个int
,同时将y
声明为一个包含5
int
的数组。 (函数和指针也是这样。)本站还有其他问题。
把所有东西放在一起,如果你typedef
,你的问题看起来像这样:
struct vertexNode
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];
这将声明类型struct vertexNode
,可变VertexNode
类型的struct vertexNode
,并且阵列AdjList
的MAXVEX
struct vertexNode
秒。 添加typedef
意味着VertexNode
成为struct vertexNode
的别名,而AdjList
成为MAXVEX
struct vertexNode
数组的别名。 就个人而言,我不建议这样写,但我想它很简洁。
这是一个示例代码。
#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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.