嘿大家,我在C中遇到了一些麻烦,我正在使用各种数组嵌套结构来模拟宇宙。这是结构代码......
struct star
{
int x;
int y;
int z;
int m;
char name[100];
};
struct colony
{
int pop;
};
struct planet
{
int x;
int y;
int z;
int m;
int colonized;
char name[100];
struct colony colony_member;
};
struct galaxy
{
int x;
int y;
int z;
char name[100];
struct planet planet_member;
struct star star_member;
};
假设我在结构中制作了10个具有随机值的随机星系,我将如何在该星系结构中创建100个行星?我很困惑如何处理这个问题的最佳方式,或者即使结构如果我想去的方式也是如此。
提前致谢!
-Devan
答案 0 :(得分:3)
你可以创建一个指针,让不同数量的行星和恒星进入你的星系!
struct galaxy
{
int x;
int y;
int z;
char name[100];
struct planet *planet_member;
struct star *star_member;
};
答案 1 :(得分:2)
您可以使用多种选项,从最简单的方法开始:
struct galaxy
{
int x;
int y;
int z;
char name[100];
int number_of_planets;
struct planet *planet_member; // a pointer!
struct star star_member;
};
并创建一个星系:
galaxy g;
g.number_of_planets = some_random_value
g.planet_member = malloc (sizeof (planet) * g.number_of_planets);
for (i = 0 ; i < g.number_of_planets ; ++i)
{
g.planet_member [i].x = something
g.planet_member [i].y = something
g.planet_member [i].z = something
// and so on for each planet
}
不要忘记,你需要free
你malloc
的记忆,否则你会得到内存泄漏。
您可以使用更复杂的数据结构,例如链接列表。所以,你的galaxy结构有一个指向列表中第一个和最后一个行星的指针。每个行星都有一个指向列表中下一个和前一个行星的指针。因此,从第一个行星开始并读取下一个行星指针,您可以处理列表中的每个行星。在Google上查找链接列表以查找有关它的更多信息。这项工作要多得多,而且已经做了很多次的工作,这导致......
...进展到C ++,其中有一个标准库,可以为您完成链接列表和其他数据类型的所有繁琐管理。所以,你的结构会变成:
struct galaxy
{
int x;
int y;
int z;
std::string name;
std::vector <struct planet> planets; // vector is an array like type
std::list <star> stars; // list is a linked list
};
但是,你可以更进一步,让galaxy成为一个C ++类,这样当你创建一个C ++类时,它会自动在其中创建行星和星星,当你获得它时,该类会自动释放所有行星并使其成为星星成立。