它是什么意思:“typedef struct {...} VNode,AdjList [20]”

时间:2015-04-18 18:53:35

标签: c struct

我是C启动器并学习Graph的一些数据结构。 我今天在维基百科上阅读了一段C代码:

    #define MAX_VERTEX_NUM 20
    typedef struct ArcNode
    {
       int adjvex; /* Position of Arc's Vertex */
       struct ArcNode *nextarc; /* Pointer to next Arc */
       InfoType *info; /* Weight) */
     }ArcNode; /* Node */
     typedef struct
     {
       VertexType data; /* Vertex Information */
       ArcNode *firstarc; /* Location to the first list node */
     }VNode,AdjList[MAX_VERTEX_NUM]; /* Head Node */
     typedef struct
     {
       AdjList vertices;
       int vexnum,arcnum; /* Vertex count and Arc count */
       GraphKind kind; /* type of Garph, directed, undirected..*/
     }ALGraph;`

我在这里阅读了几篇相关的帖子,例如“typedef struct vs struct definitions”,但我仍然对这种用法感到困惑:

typedef struct  {....  }VNode,AdjList[MAX_VERTEX_NUM];

那么AdjList是什么?这是一个阵列?如果是这样,这句话意味着什么:

AdjList vertices;

感谢。 参考:http://zh.wikipedia.org/wiki/%E9%82%BB%E6%8E%A5%E8%A1%A8

2 个答案:

答案 0 :(得分:5)

AdjList是一个MAX_VERTEX_NUM中定义类型的struct大小的数组。

C中的宣言有点搞笑。

typedef struct {...} AdjList[MAX_VERTEX_NUM]

应该被理解为AdjList被定义为结构中定义的类型的大小MAX_VERTEX_NUM的数组。这是一种类型,这意味着您可以将变量声明为此类型的实例。

答案 1 :(得分:2)

AdjList是一个类型为“struct”中定义类型的大小为MAX_VERTEX_NUM的数组。

一个更简单的例子,展示了正在发生的事情:

typedef int myintarray[10];

int main()
{
   myintarray array; // same as "int array[10]"

   array[2] = 2 ;
}