将结构放入C中的数组元素中

时间:2013-12-05 11:36:09

标签: c arrays struct

我有一些代码(我已经简化了一点):

# 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]。有人可以指导我实现这个目标的正确方法吗?

1 个答案:

答案 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'来修改它。