Hogyan adja át a függvény paraméterként egy kétdimenziós dinamikus tömb
Hogyan adja át a függvény paraméterként egy kétdimenziós dinamikus tömb
Hogyan adja át a függvény paraméterként egy kétdimenziós dinamikus tömb?
Én ezzel
írja Matr = tömb tömb valós
.
funkció Func (var A, B: MATR): logikai;
.
Ha a függvény egy hibát érvénytelen Pointer
bejelentette a B és e SetLength tenni?
eljárás TForm8.Button1Click (Sender: TObject);
var a, b: Matr;
i, j: integer;
kezdődik
SetLength (a, N, N);
SetLength (a, N, N);
.
Func (a, b);
végén;
Sajnálom, zárt, így:
eljárás TForm8.Button1Click (Sender: TObject);
var a, b: Matr;
i, j: integer;
kezdődik
SetLength (a, N, N);
SetLength (b, N, N);
.
Func (a, b);
végén;
az I: = 0 és n-1 do SetLength (A [i], m);
mozhet vyskochit „access violation. Dazhe Esli net, potom, pered SetLength (A, NewN) Vam pridetsya snachala
az I: = 0 és n-1 do SetLength (A [i], 0);
dlya osvobozhdeniya pamyati. Mozhet, ya ne prav i Delphi podderzhivaet mnogomernye dinamikus tömböket? Kto znaet?
V lyubom sluchae, eto nemnogo nadumano, T. K. lyuboj masszív v dushe odnomeren. Mozhno opredelit "
írja Matr = rekord
m, n: egész;
Bejegyzés: tömb valódi;
vég
Egy luchshe dazhe
írja Matr = osztály
magán
Fm, Vn: integer;
FEntries: tömb valódi;
.
nyilvános
tulajdon n: Egész olvasni Fn írási SetN;
.
ingatlan Entrie [i, j: egész szám]: real olvasni GetEntrie írási SetEntrie; alapértelmezett;
végén;
eljárás Matr.SetN (Érték: Egész szám);
kezdődik
ha az érték <> Fn ezután kezdődik
Fn: = Érték;
SetLength (FEntries, Fn * Fm);
végén;
végén;
funkció Matr.GetEntry (i, j: Egész szám): a valós;
kezdődik
// ha érvénytelen érték lehetséges, helyezze tartomány ellenőrizze itt
Eredmény: = FEntries [(i-1) * (Fm-1) + J-1];
végén;
Nu, i ne zabyt „SetLength (FEntries, 0) v Matr.Destroy;
Alex44 nevű felhasználótól nem hiszem, hogy ez a probléma
Van valaki használt többdimenziós dinamikai. tömb, mint egy függvény paraméter.
2Faustov
> SetLength (a, N, N);
> SetLength (b, N, N);
A SetLength, mintha csak két paramétert.
És itt egy egyszerű példa a dinamikus kétdimenziós tömböt:
.
Tarr = tömb tömb egész szám;
.
eljárás TForm1.FillArr (var ar: Tarr);
var i, j: integer;
kezdődik
i: = Low (ar) Magas (ar) do
j: = Alacsony (ar [i]) magas (ar [i]) do
ar [i, j]: = Random (1000);
végén;
eljárás TForm1.Button1Click (Sender: TObject);
var a: Tarr;
i, j: integer;
kezdődik
SetLength (a, 10);
i: = Low (a) Magas (a) do
SetLength (a [i], 10);
FillArr (a);
i: = Low (a) Magas (a) do
j: = alacsony (a [i]), hogy nagy ([i]) do
Memo1.Lines.Add (IntToStr (a [i, j]) + "");
végén;
2Faustov
> SetLength (a, N, N);
> SetLength (b, N, N);
> A SetLength, mintha csak két paramétert.
Hiba, SetLength (b, N, N); Úgy működik.
> Ha a függvény egy hibát érvénytelen Pointer
És ez a funkció egy pillantást?
A dinamikus tömb - ez a mutató, így nem adja át a var paraméter sok értelme - minden esetben csak egy mutató vezetjük, ami azt jelenti, a tömb fog változni egyébként. Hogy csinálsz ilyen konstrukciók:
funkció f1 (var a, b: TMatr): logikai;
kezdődik
A: = B; // itt
SetLength (a, 7,7); // itt is fontos, ha van egy módosító előtt pametrami var.
végén;
függvény f1 (a, b: TMatr): logikai;
kezdődik
a [5,5]: = 7; // itt nem számít. által továbbított tömb változás.
végén;
Igen teljesen elfelejtettem.
Faustov. adott kódrészletet nem tartalmaz semmit, bűncselekmény. Itt található a funkciót.