我有一个问题,如何制作一个数组vertextDegree [nbColours]
,其中包含nbColours
元素,但“nbColours”未知,我必须从文件中获取它。
看看代码
那么我该怎么做才能解决这个问题?
int nbEdges,nbVetices, nbColours ;
typedef struct st_graphVertex
{
int index;
int colour;
int val ;
int vertexDegree[nbColours]; // it won't work because nbColours unknown
// here and I want get it from file in the main
struct st_graphVertex *next;
t_edgeList *out;
}t_grapheVertex;
答案 0 :(得分:2)
您不能在C99之前或非最后成员中这样做。相反,您可以使该成员成为固定大小的指针:
int* vertexDegree;
并指出在运行时已知的适当大小的数组:
myVertex.vertexDegree = malloc(nbColours*sizeof(int));
答案 1 :(得分:2)
在C99中有一个特殊的语法,虽然每个struct
只限于一个数组(在你的情况下也没问题) - 把数组作为最后一个成员,并删除它的大小,如这样:
typedef struct st_graphVertex
{
int index;
int colour;
int val ;
struct st_graphVertex *next;
t_edgeList *out;
int vertexDegree[];
}t_grapheVertex;
现在,数组的大小非常灵活:您可以在运行时决定它应该是什么。此外,不同的st_graphVertex
值可以设置不同的此大小(尽管在这种情况下,通常将nbColours
的特定大小作为字段放在同一struct
中。)
使用此技巧的“付款”是无法在堆栈或全局或静态内存中分配此类struct
。您必须动态分配它们,如下所示:
t_grapheVertex *vertex = malloc(sizeof(t_grapheVertex)+sizeof(int)*nbColours);
答案 2 :(得分:0)
你也可以使用Struct Hack来完成,但这与dasblinkenlight在答案中所说的相似。