[英]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
實際上是一個存儲類,就像static
或extern
,類型別名聲明讀起來像變量聲明。 例如
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
,並且陣列AdjList
的MAXVEX
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 a
與VertexNode a[MAXVEX]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.