2012-10-31 144 views
2

您好,我在定义结构中的结构数组时遇到了一些麻烦。 这是我的想法,我需要一个名为figure的结构,它包含图形的名称,坐标计数和坐标(x,y)。每个图可以有任意数量的坐标。 我还需要能够动态地重新分配空间以获得不断增加的坐标列表......请帮助指引我朝着正确的方向前进。 谢谢你,在C中定义一个结构中的结构阵列C

泰勒

typedef struct { 
    char fig_name[FIGURE_LEN + 1]; 
    int coordcount; 
    /* here i need to declare an array of coord structures that 
    but i am not sure how to do this properly. I was originally 
    going to try something like as follows */ 
    coords *pointer; 
    pointer = malloc(sizeof(coords)); 
    pointer = coords figcoord[]; 
    /* however i am quite certain that this would not work */ 
} figure; 

typedef struct { 
    double x; 
    double y; 
} coords; 
+2

您不能将默认结构值分配给C中的成员变量。您的* code *隐藏在结构定义的中间。在可以使用之前,必须先声明坐标,否则不会在C. – WhozCraig

+0

中工作。另外,C是一种静态类型语言,因此您需要先声明才能进行分配。 – yeyo

+0

@Kira是的,我认为这是一个问题,我只是不知道如何解决这个问题。 – wenincode

回答

1

踢朝着正确的方向。尝试这样的事情。我为缺乏错误检查的malloc()电话道歉,但你会得到的总体思路(我希望):

#include <stdlib.h> 

#define FIGURE_LEN 128 

typedef struct 
{ 
    double x; 
    double y; 
} coords; 

typedef struct 
{ 
    char fig_name[FIGURE_LEN + 1]; 
    int coordcount; 
    coords *pointer; 
} figure; 


/* allocate a dynamic allocated figure */ 
figure* alloc_figure(char* name, int coordcount) 
{ 
    figure *fig = malloc(sizeof(figure)); 
    fig->coordcount = coordcount; 
    fig->pointer = malloc(sizeof(coords) * coordcount); 
    strncpy(fig->fig_name, name, FIGURE_LEN); 
    fig->fig_name[FIGURE_LEN] = 0; 
    return fig; 
} 

/* release a dynamic allocated figure */ 
void free_figure(figure** ppfig) 
{ 
    if (!*ppfig) 
     return; 

    free((*ppfig)->pointer); 
    free(*ppfig); 
    *ppfig = NULL; 
} 

int main(int argc, char *argv[]) 
{ 
    figure fig; 
    fig.coordcount = 10; 
    fig.pointer = malloc(10 * sizeof(coords)); 

    /* access fid.pointer[0..9] here... */ 
    fig.pointer[0].x = 1.0; 
    fig.pointer[0].y = 1.0; 

    /* don't forget to free it when done */ 
    free(fig.pointer); 

    /* dynamic allocation function use */ 
    figure *fig1 = alloc_figure("fig1", 10); 
    figure *fig2 = alloc_figure("fig2", 5); 

    fig1->pointer[9].x = 100.00; 
    fig2->pointer[0].y = fig1->pointer[9].x; 

    /* and use custom free function for releasing them */ 
    free_figure(&fig1); 
    free_figure(&fig2); 

    return EXIT_SUCCESS; 
} 
+0

谢谢,这看起来像我正在寻找什么。 – wenincode

1

我觉得这样的事情应该工作。

typedef struct { 
    char* figNamePtr; 
    int coordCount; 
    Coords *cordsPointer; 
    //void (*ReleaseMemory)(); // create this function. 
} Figure; 

typedef struct { 
    double x; 
    double y; 
} Coords; 

Figure * NewFigure(int coordCount){ 
    Figure * retVal = (Figure *) malloc(sizeof(Figure)); 

    /* Initialize Figure */ 
    retVal->figNamePtr = (char *) malloc(sizeof(char) * (FIGURE_LEN + 1)); 

    /* Set the Function pointer, 
     create a function named ReleaseMemory that free up the memory */ 
    //retVal->ReleaseMemory = ReleaseMemory; 

    retVal->cordCount = coordCount 

    retVal->cordsPointer = malloc(sizeof(Coords) * coordCount); 

    return retVal; 
} 

有了这个代码,当你想创建一个新的图,只是调用的函数NewFigure()必要的参数。完成使用后,请拨打ReleaseMemory()

希望它有帮助!