Array als Parameter übergeben
-
Hallo,
ich möchte ein Array als Parameter einer selbstgeschriebenen Funktion übergeben.
Mitint __fastcall TForm1::SigmaArray (int d[int e], int f);
krieg ich aber nur die Fehlermeldungen:
[C++Error]unit1.h(27): Expression syntax. [C++Error]unit1.h(27): Array bounds missing ].
Was mach ich falsch bzw. wie muss ich es richtig machen?
Kaljinka
-
Eine Referenz (&d) auf dein Feld übergeben.
-
so?
int __fastcall TForm1::SigmaArray (int &d, int f);
Aber dann krieg ich die Fehlermeldung: Undefined symbol 'e'.
Bin noch Anfänger!
Kaljinka
-
Mit &d übergibst du nur eine Referenz auf den Anfang deines Arrayfeldes im Speicher. int e ist der Index vom Arrayfeld. Mit (&d+e) hast du dann eine Referenz auf die gewünschte zu übergebende Variable.
Ps. Dies musst du natürlich in deiner Funktion entsprechend anpassen.
-
Da komm ich nicht mit. Ich wollte einfach bloß alle Werte des Arrays übergeben.
Muss ich dann e als eigenen Parameter übergeben?
-
Du übergibst mit &d nur die Anfangsadresse des für das Array reservierten Speicherbereichs an deine Funktion. Die Größe des Feldes weisst du aber dann in der Funktion aber nicht. Wenn dein Arrayfeld eine variable Größe hat musst du deiner Funktion noch die Größe des Arrays mitteilen.
-
Danke für deine Hilfe.
Meinst du so?int __fastcall TForm1::SigmaArray (int &d, int e, int f);
Dann krieg ich aber in der Funktion bei
for (int k=0; k<=e-1; k=k+f) { f = f+d[k]; }
die Fehlermeldung: Invalid indirection.
Was muss ich noch ändern?Kaljinka
-
for (int k=0; k<e; k++) { f = f+d[k]; }
Durch das Addieren des Indexes k mit f (Wert aus dem Arrayfeld) gelangt dein Index abhängig von den Werten in einen unzulässigen Bereich.
-
Ups, hatte mich verschrieben.
Sollte eigentlich so aussehen:int g; for (int k=0; k<e; k=k+f) { g = g+d[k]; }
Krieg aber immernoch dieselbe Fehlermeldung!
Was passt ihm eigentlich nicht?Kaljinka
-
Beispiel:
Du hast ein Array mit zwei Feldern d[0]=10,d[1]=20;
Du greifst auf dein Array folgendermaßen zu:g = g+d[k];
Wenn in deinem Index k ein Wert größer 1 steht greifst du auf einen nicht für das Array reservierten Speicherbereich zu.
Welcher Wert steht bei deiner Funktion in f ??? (k=k+f)
-
Sehe gerade:
int __fastcall TForm1::SigmaArray (int &d, int e, int f);
Eine Funktion(Methode) von TForm1 ?
Dann machs so:int __fastcall TForm1::SigmaArray (int *d, int e, int f);
-
f = 1 und das Array, das ich übergebe, ist definiert:
int z[2004];
Wie ruf ich eigentlich die Funktion auf, bzw. was geb ich für *d an?
Ich wollte es so aufrufen, funktioniert aber nicht:
int wert1 = SigmaArray(z, 2004, 1)
hey, jetzt geht's doch!
Danke für deine Hilfe!
Kannst du mir des erklären mit den *d und &d?Kaljinka