Graeme Geldenhuys schrieb: > > > 1) Why would you use a pointer to an array and not simply a variable > what IS the array? In the program I am porting the following field > variable is defined. > > FLines: ^TLinesArray; > > Why couldn't I simply say: > > FLines: TLinesArray;
Because this array has a fixed size. > > Is there some advantage for using a pointer to the array, when passing > it around between procedures and functions? > > > 2) The TLinesArray is a dynamic array, so shouldn't I maybe change the > ported code to define the array as follows, instead of the [0..0] > idea? > > TLinesArray = array of TLayoutLine; A dynamic array does several magic behind your neck mainly taking care of managed types. It depends on the code if it works or not. > > > > 3) Maybe the strange usage (to me at least) of dynamic arrays could be > explain in how the original program allocates memory for the array. In > the class where FLines is defined, it initially reserves ten empty > elements for the array in the class constructor. > > FAllocatedNumLines := 10; > GetMem( FLines, FAllocatedNumLines * sizeof( TLayoutLine ) ); > > And then later if it needs more space for elements, it redefines the > array elements as follows: > > Procedure TRichTextLayout.AddLineStart( Const Line: TLayoutLine ); > var > NewAllocation: longint; > begin > if FNumLines >= FAllocatedNumLines then > begin > // reallocate the array twice the size > NewAllocation := FAllocatedNumLines * 2; > FLines := ReAllocMem(FLines, NewAllocation * sizeof(TLayoutLine)); > FAllocatedNumLines := NewAllocation; > end; > FLines^[ FNumLines ] := Line; // ***** (1) > inc( FNumLines ); > end; > > > Like I said, maybe this is related to different implementations of > object pascal. By doesn't one allocate memory (array elements) via the > SetLength() procedure? SetLength is a Borland extension. The code as shown is standard pascal code. It's relative complexity simply shows why dyn. arrays were invented. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal