有可能有一个大小在运行时确定的数组,如此,
Procedure prog is
type myArray is array(Integer range <>) of Float;
arraySize : Integer := 0;
theArray : myArray(0..arraySize);
Begin
-- Get Array size from user.
put_line("How big would you like the array?");
get(arraySize);
For I in 0..arraySize Loop
theArray(I) := 1.2 * I;
End Loop;
End prog;
Run Code Online (Sandbox Code Playgroud)
除了使用动态链接列表或其他类似结构之外,有没有办法实现此结果?或者是否有一个简单的内置数据结构比使用动态链接列表更简单?
我希望创建一个打包记录,可以容纳一个数组,长度从5-50元素不等.是否可以这样做,以便记录可以打包没有浪费的空间?我将在创建记录时知道阵列中有多少元素.
-- the range of the array
type Array_Range_T is Integer range 5 .. 50;
-- the array type
type Array_Type_T is array range (Array_Range_T) of Integer;
-- the record
type My_Record_T (Array_Length : Integer := 5) is
record
-- OTHER DATA HERE
The_Array : Array_Type_T(Array_Length);
end record;
-- Pack the record
for My_Record_T use
record
-- OTHER DATA
The_Array at 10 range 0 .. Array_Length * 16;
end record;
for My_Record_T'Size use 80 + (Array_Length * 16);
Run Code Online (Sandbox Code Playgroud)
这显然不会编译,但显示了我想要做的精神.如果可能的话,我想保持阵列的长度不在记录中.
谢谢!