在C中定义结构内的结构数组

时间:2012-10-31 02:13:52

标签: c dynamic structure allocation

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

泰勒

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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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()

希望它有所帮助!