簡體   English   中英

將結構體定義為數組是什么意思?

[英]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實際上是一個存儲類,就像staticextern ,類型別名聲明讀起來像變量聲明。 例如

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 ,並且陣列AdjListMAXVEX 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 aVertexNode a[MAXVEX]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM