数组指针不从C ++函数返回

时间:2016-08-27 18:44:21

标签: c++ arrays

我有以下代码来初始化一个数组,它起作用:

int main() {
    int particle_count = 10000;

    MyRNG my_rng = MyRNG(0.0,1.0);

    Particle simulation_particles[particle_count];
    for (int i = 0; i < particle_count; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            simulation_particles[i].assign(j,my_rng.next());
        }
    }

但是,当我尝试将for循环放在函数中时,所有粒子都设置为相同的值:

void initialize_particle(Particle * p,MyRNG rgen)
{
    for (int i = 0; i < 3; i++)
    {
        float value = rgen.next();
        p->assign(i,value);
    }
}
void initialize_simulation_particles(int size,Particle * simulation_particles,MyRNG rgen)
{
    for (int i = 0; i < size; i++)
    {
        initialize_particle(&simulation_particles[i],rgen);
    }
}


int main() {
    int particle_count = 10000;

    MyRNG my_rng = MyRNG(0.0,1.0);

    Particle simulation_particles[particle_count];
    initialize_simulation_particles(particle_count,simulation_particles,my_rng);

1 个答案:

答案 0 :(得分:1)

void initialize_simulation_particles(int size,Particle * simulation_particles, MyRNG rgen)中,您按值rgen获取。这意味着您从my_rng获得了随机生成器main的副本。由于它是一个伪随机数生成器,它在给定状态下生成相同的数字,并且每次每次生成相同的数字时都将相同的状态复制到该函数。解决方案是使用initialize_simulation_particlesinitialize_particleMyRNG &rgen中通过引用传递它,以便my_rng的状态进展,从而为每个粒子生成不同的数字。