动态数组大小在运行时在ada中确定

时间:2012-12-06 00:57:37

标签: ada dynamic-arrays

是否可以使用在运行时确定大小的数组,如此

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;

除了使用动态链接列表或其他类似结构之外,还有办法实现此结果吗?或者是否有一个简单的内置数据结构比使用动态链接列表更简单?

2 个答案:

答案 0 :(得分:7)

当然,请按如下方式在块中声明:

procedure prog is
   arraySize : Integer := 0;
   type myArray is array(Integer range <>) of Float;
begin
   -- Get Array size from user.
   put_line("How big would you like the array?");
   get(arraySize);

   declare
      theArray : myArray(0..arraySize);
   begin
      for I in 0..arraySize Loop
         theArray(I) := 1.2 * I;
      end Loop;
   end;
end prog;

或将arraySize作为参数传递给子程序,并在该子程序中声明并对其进行操作:

procedure Process_Array (arraySize : Integer) is

    theArray : myArray(0..arraySize);

begin
   for I in arraySize'Range Loop
      theArray(I) := 1.2 * I;
   end Loop;
end;

这只是说明性的(而不是编译:-),因为你需要处理无效数组大小等事情。

答案 1 :(得分:1)

是的,您可以推迟约束对象的声明,直到您知道大小。在此example中,数组Candidates可以在嵌套块(由关键字declare引入)或堆上(使用关键字new)分配。在此相关的example中,Line每次循环时都会有不同的大小,具体取决于Get_Line找到的内容。