我有两个结构。
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语言的新手,请放轻松:)
答案 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++);
}
}