繁体   English   中英

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

[英]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实际上是一个存储类,就像staticextern ,类型别名声明读起来像变量声明。 例如

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 ,并且阵列AdjListMAXVEX 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 aVertexNode a[MAXVEX]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM