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

标签 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 

我对 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/

相关文章:

c - if-else 结构有什么问题?

c++ - 为什么 Microsoft 的 C 编译器要函数开头的变量?

c - 从C到GMP实现

java - 如何在 JSP 页面中将 Int[] 数组复制或转换为 var

arrays - 我们如何对rust-ndarray中的数组进行算术运算?

c - 为什么下面的语句打印三次?

java foreach改变元素

c# - 为什么需要调用:this() on a struct to use automatic properties in c#?

c++ - 结构的 char* 成员被 strcmp 覆盖?

c - 如何在 C 中声明指向结构的指针数组然后使用它?