如何扫描主要外部的全局变量?

时间:2013-09-07 09:57:52

标签: c

我有一个问题,如何制作一个数组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;

3 个答案:

答案 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在答案中所说的相似。