gpt4 book ai didi

c - 将结构体 typedef 为数组意味着什么?

转载 作者:行者123 更新时间:2023-12-02 01:13:39 28 4
gpt4 key购买 nike

我书中的图邻接表代码由以下给出:

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;

声明xint 类型的变量,同时

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 ,同时声明y5 的数组int s。 (函数和指针也是这样。)这个网站上还有其他关于它的问题。

将所有内容放在一起,如果去掉 typedef,您的问题将如下所示:

struct vertexNode
{
VertexType data;
EdgeNodeType *firstEdgeNode;
} VertexNode, AdjList[MAXVEX];

这将声明类型 struct vertexNode ,变量VertexNode类型 struct vertexNode ,以及数组 AdjListMAXVEX struct vertexNode s。添加typedef意味着VertexNode成为 struct vertexNode 的别名那AdjList成为 MAXVEX 数组的别名struct vertexNode s。就我个人而言,我不建议这样写,但我想这样很简洁。

关于c - 将结构体 typedef 为数组意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024134/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com