Use UDTs for Irregular Arrays

Use UDTs for Irregular Arrays

If you use variable-length strings and/or dynamic arrays in a user-defined type (UDT), the actual data does not become part of the structure. Instead, four-byte pointers are stored in the structure, and the actual data is stored separately. Therefore, it doesn’t matter if the strings and/or arrays in variables A and B are different sizes; the type size is the same, assuming A and B are of the same UDT.

It also means that if you create an array with a UDT that itself includes dynamic arrays, any “inside” array inside one element of the “outside” array is physically distinct from the corresponding “inside” array of any other “outside” array element. Therefore, code along these lines is perfectly fine:

 Type AnotherType	Something As Integer	SomethingElse As LongEnd TypeType SomeType	Something As Integer	InsideArr() As AnotherType	SomethingElse As LongEnd TypeSub Test()	'   set up outside array	ReDim OutsideArr(1 To 4) As SomeType	'   set up inside arrays	ReDim OutsideArr(1).InsideArr(1 To 3)	ReDim OutsideArr(2).InsideArr(1 To 7)	ReDim OutsideArr(3).InsideArr(-4 To 0)	ReDim OutsideArr(4).InsideArr(1 To 3, 2 To 14)End Sub

You can use this code to create psuedo-multidimensional, nonrectangular arrays, or arrays in which more than one dimension is resized using ReDim Preserve. Both are impossible with ordinary multidimmed arrays.


Share the Post: