如何动态分配结构数组并在内部分配数组?

时间:2019-11-29 21:08:31

标签: c

我有两个结构。

typedef struct Side Side;

struct Side{
    bool taken;
    unsigned color;
};

typedef struct{
    Side* sides;
}Cube;

我想动态制作一个包含100个多维数据集的数组,每个多维数据集具有3个面-这也需要是动态的。 正确的做法是什么?

void generateCube(Cube** cubes, int size, int (*calculateFunction)(int)){
    *cubes = (Cube*)malloc(sizeof(Cube) * size);
    Cube* cubeIterator = *cubes;
    Cube* endCube = *cubes + sizeof(Cube) * size;
    unsigned sideIndex = 1;

    for(endCube; cubeIterator != endCube; cubeIterator += sizeof(Cube)){
        cubeIterator->sides = (Side*)malloc(sizeof(Side) * 3);

        cubeIterator->sides[0].color = (*calculateFunction)(sideIndex++);
        cubeIterator->sides[1].color = (*calculateFunction)(sideIndex++);
        cubeIterator->sides[2].color = (*calculateFunction)(sideIndex++);
    }
}   

这是我想出的,但是分配给颜色的值不正确。 我是C语言的新手,请放轻松:)

1 个答案:

答案 0 :(得分:0)

谢谢您的评论!我使用的指针算法不正确。这是更新的工作代码。

void generateCube(Cube** cubes, int size, int (*calculateFunction)(int)){
        *cubes = malloc(sizeof(Cube) * size);
        Cube* iterator = *cubes;
        Cube* end = iterator + size;
        unsigned sideIndex = 1;
        for(end; iterator != end; ++iterator){
                iterator->sides = malloc(sizeof(Side) * 3);

                iterator->sides[0].color = (*calculateFunction)(sideIndex++);
                iterator->sides[1].color = (*calculateFunction)(sideIndex++);
                iterator->sides[2].color = (*calculateFunction)(sideIndex++);
        }
}