![]() The highlighted line in the example above could be replaced by setLength ( bar, length ( bar )), though the copy function is preferred as it is more explanatory.Ĭalling setLength ( myDynamicArrayVariable, 0 ) virtually does myDynamicArrayVariable := nil and decreases the reference count. This procedure can be used to make data unique again, despite the fact only the references, the pointers (so just addresses) have been copied ( bar := foo). Only by using copy both arrays can be modified independently. This lets you unite setLength calls and a series of assignments in one statement:ġ program dynamicArra圜opyDemo ( input, output, stdErr ) 2 3 var 4 foo, bar : array of char 5 6 procedure printArrays 7 begin 8 writeLn ( 'foo = ', foo, ' bar = ', bar ) 9 end 10 11 begin 12 setLength ( foo, 1 ) 13 foo := 'X' 14 // copies _reference_ 15 bar := foo 16 write ( ' initial values: ' ) 17 printArrays 18 19 // change content _via_ _second_ reference 20 bar := 'O' 21 write ( 'changed via 2nd ref: ' ) 22 printArrays 23 24 // copy content 25 bar := copy ( foo, 0, length ( foo )) 26 bar := 'X' 27 write ( ' copied and changed: ' ) 28 printArrays 29 end. ![]() ![]() ![]() Since FPC 3.0.0 dynamic array types that are not anonymous are automatically equipped with a “constructor” as it might be familiar from object-oriented programming. 1 program binomialPotence ( input, output, stdErr ) 2 var 3 pascalsTriangle : array of array of longWord 4 exponent : longInt 5 factor : longInt 6 begin 7 setLength ( pascalsTriangle, 20 ) 8 9 setLength ( pascalsTriangle, 1 ) 10 pascalsTriangle := 1 11 12 setLength ( pascalsTriangle, 2 ) 13 pascalsTriangle := 1 14 pascalsTriangle := 1 15 16 // construct values by simple addition 17 for exponent := 2 to high ( pascalsTriangle ) do 18 begin 19 setLength ( pascalsTriangle, exponent + 1 ) 20 pascalsTriangle := 1 21 pascalsTriangle := 1 22 for factor := 1 to exponent - 1 do 23 begin 24 pascalsTriangle := 25 pascalsTriangle + 26 pascalsTriangle 27 end 28 end 29 30 //. ![]()
0 Comments
Leave a Reply. |