我有一些代码(我已经简化了一点):
# define NUMBER_OF_PARTICLES 1
typedef struct {
Axes velocity; // struct with x,y,z floats
} Particle;
Particle * array_of_particles;
Particle create(Particle p) {
p.velocity.x = 0.0f;
p.velocity.y = 0.0f;
p.velocity.z = 0.0f;
return p;
}
void create_particles() {
array_of_particles = (Particle *) malloc(sizeof(Particle) * NUMBER_OF_PARTICLES);
int p;
for (p = 0; p < NUMBER_OF_PARTICLES; p++) {
Particle current_particle = array_of_particles[p];
array_of_particles[p] = create(current_particle);
}
}
希望你能看到我试图让索引p
的数组元素成为current_particle
的结构。我认为当我打印0
时,我误解了如何执行此操作,因为它返回array_of_particles[p]
。有人可以指导我实现这个目标的正确方法吗?
答案 0 :(得分:4)
试
void create_particles()
{
array_of_particles
= (Particle *) malloc(sizeof(Particle)*NUMBER_OF_PARTICLES);
int p;
for (p = 0; p < NUMBER_OF_PARTICLES; p++) {
Particle* current_particle = array_of_particles + p;
create(current_particle);
}
}
并更改
void create(Particle* p)
{
p->velocity.x = 0.0f;
p->velocity.y = 0.0f;
p->velocity.z = 0.0f;
}
你所做的是将参数的副本传递给函数,以便更改永远不会离开函数。
也没有必要返回粒子然后复制它,你已经将结构传递给函数,所以你可以使用参数'p'来修改它。