2016-08-27 6 views
-3

ich den folgenden Code hat einen Array zu initialisieren, die funktioniert:Array Zeiger nicht von C Rückkehr ++ Funktion

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()); 
     } 
    } 

aber wenn ich versuche, die für Schleifen in Funktionen zu setzen, alle Teilchen auf die gleiche gesetzt bekommen Werte:

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); 

Antwort

1

In void initialize_simulation_particles(int size,Particle * simulation_particles, MyRNG rgen) nehmen Sie rgen von Wert. Das bedeutet, Sie erhalten eine Kopie des Zufallsgenerators von main. Da es sich um einen Pseudozufallszahlengenerator handelt, der für einen bestimmten Zustand die gleichen Zahlen erzeugt, kopieren Sie jedes Mal denselben Zustand in die Funktion, wenn jedes Mal die gleiche Zahl erzeugt wird. Die Lösung besteht darin, sie unter Bezugnahme auf initialize_simulation_particles und initialize_particle unter Verwendung von MyRNG &rgen weiterzuleiten, so dass der Zustand my_rng fortschreitet und daher unterschiedliche Zahlen für jedes Teilchen erzeugt.

+0

danke. Ich war auf dem völlig falschen Weg und dachte, ich würde einen Fehler machen. Bereich und die Array-Zeiger (C++ Mittwoch gestartet). – bordeo