Rückgabe von Arrays im Funktionskopf
-
Hallo,
Ich habe folgende Arrays:
double dErgebnis1[26][1],dErgebnis2[5][1],dErgebnis3[26][2],dErgebnis4[5][1]={0};
in meinem Programm werden da auch Werte reingespeichert.Wie gebe ich die im Funktionskopf zurück...Pointer?...?
int main(.....,??????)
danke
grüße rene
-
Du übergibst der Funktion einfach Zeiger auf Arrays. Die Arrays sind vom Typ double**, also würde der Funktionskopf ungefähr so aussehen:
void func(double*** dErgebnis1,double*** dErgebnis2,double*** dErgebnis3,double*** dErgebnis4)
-
die arrays sind vom typ double*. multidim arrays sind immer nur vom typ*. die dimensionen werden beim kompilieren herumgereicht. nur wenn du dir selber multidims bastelst, hast du die chance auf mehrfache indirektion.
wenn ueberhaupt, dann so:
void ne_funktion(double a1[][1], double a2[][1], double a3[][2], double a4[][1]) { .... } double dErgebnis1[26][1],dErgebnis2[5][1],dErgebnis3[26][2],dErgebnis4[5][1]={0}; ne_funktion(dErgebnis1, dErgebnis2, dErgebnis3, dErgebnis4);
du musst alle dimensionen bis auf die aeusserste (die ganz links) angeben.
-
danke c.rackwitz so funktioniert es.
aber noch ne kleine frage
array[50][2]
hat das jetzt 51 zeilen und 3 Spalten,oder zwei spalten?
und was ist mit '\0' muss ich das einplanen?wie genau weiße ich meinen arrays werte zu:
dErgebnis=result;...?danke
grüße
rene
-
ein array[50][2]
hat 50 zeilen und von denen hat jede 2 spalten. stells dir so vor:
[0][0], [0][1], [1][0], [1][1], [2][0], [2][1], [3][0], [3][1], ..., [49][0], [49][1]
wie du siehst, es geht von 0-1, und das wiederum von 0-49.
der compiler uebernimmt fuer dich die berechnung des eigentlichen indexes: y*wx + x, wobei x und y die indices sind und wx in deinem fall die [2].das '\0' hat fuer dich erst bedeutung, wenn du mit strings umgehst.
-
ok ich glaub jetzt hab ich das gerafft.
Ich glaub meine Zuweisung ist nicht richitg von den ergebnisarrays...?for (i = 0; i < 26; i++)
{
if (!preisach_t(par4[i], &result, 0))
fprintf(stderr, "Berechnung von preisach() ist fehlgeschlagen.\n");
else
{
printf("%g\t%g\n", par4[i], result);
fvec[i] = result;dErgebnis1[i][0]=par4[i];
dErgebnis1[i][1]=result;
printf("dErgebnis1: %g\t%g\n",dErgebnis1[i][0],dErgebnis1[i][1]);
}
}grüße rene
-
an dem kleinen stueck code nicht erkennbar