[英]How to dynamically allocate an array of structs and also allocate an array inside it?
我有两个结构。
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 的新手,请放轻松:)
谢谢你的意见! 我错误地使用了指针算法。 这是更新的工作代码。
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++);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.