tpierron | Moltonnel a écrit :
Ok pour le point 2/, j'imagine qu'il faut mettre struct à la place de double.
Par contre pour le 1/, je déclare bien le nombre d'élément à la ligne : double nSi3N4[((energyEnd - energyStart) + 1)] non ?
|
Hmm, il parle de ta structure "nSi3N4Structure": sa déclaration ne veut rien dire. On dirait que tu espérait encapsuler le tableau "nSi3N4" dans une structure pour retourner la valeur au programme appelant, parce que t'as du lire quelque part que les tableaux ne se manipulent que par adresse.
Ce n'est pas pour rien que les tableaux se manipulent par adresse: c'est pour éviter les copies inutiles. Dans ton main(), tu veux modifier ton tableau, donc transmet ça directement à ta fonction :
Code :
#include <iostream> #include <fstream> #include <cmath> // Personal function using namespace std; void opticalIndexSi3N4(double * nSi3N4, int energy, int energyStart, int energyEnd) { double const hc(1.987e-25); double const A(1.897); double const B(17.91e-3); double const C(87.285e-5); double lambda(0); for (int i(0); i < ((energyEnd - energyStart) + 1); i++) { energy = energyStart + i; lambda = hc/(energy*1e-3*1.602e-19)*1e9; nSi3N4[i] = A + B/pow(lambda,2) + C/pow(lambda,4); } } int main() { int const energyStart(1000); // Starting energy, in meV int const energyEnd(3000); // Ending energy, in meV int energy(0); double nSi3N4[((energyEnd - energyStart) + 1)]; // Array declaration for storing optical index of Si3N4 // nSi3N4; opticalIndexSi3N4(nSi3N4, energy, energyStart, energyEnd); // cout << nSi3N4[1] << endl; }
|
Idéalement, ça serait mieux de passer par des std::vector, parce que ton tableau fait quand même 16008 octets, alloués sur la pile. Ça commence à ne pas être négligeable. Mais bon, dans la mesure où tu débutes, on va pas brusquer les choses...
|