我是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
答案 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 ;
}