Personally I try to avoid types as much as possible. Simply because I think it complicates the readability of code. No doubt, types are very useful in some situations. The classic requirement for types is: you have a player with several properties, some ints, some floats and some strings. You couldn't store all this in one DIM array, but it works with a type.
Additionally, as mentioned earlier, arrays can't be redimed dynamicly - at least not by default. You can however emulate this with some simple functions, eg:
new_size=old_size+1
dim helper_array(new_size)
for i=0 to old_size
helper_array(i)=gamedata(i)
next
dim gamedata(new_size)
for i=0 to old_size
gamedata(i)=helper_array(i)
next
So the array gamedata was resized pseudo-dynamicly. Unfort. you can't use an array pointer as a function parameter, it however works as descrbed before.
In case you only need a static sized array then you should;t use a type since types invoke a lot address pointer work. Some people use types to create a variable number of objects and then parse them each time they need to access one of them, eg.
for each mytype
comparing some fields with some other fields, just to find out the index of this type
next
Instead you better create an array of types, this way you'll be able to access them by index:
Type dataT ; 'data' is a reserved word.
Field x%, y%
End Type
Dim ship.dataT(9) ; 0 to 9, inclusive in blitz.
For i = 0 To 9
ship(i) = New dataT
ship(i)\x = 1
ship(i)\y = 1
Next