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

10

是否可以像这样在运行时确定大小的数组,

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个回答

9
当然,可以按照以下方式在代码块中声明它:
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;

或者将数组大小作为参数传递到子程序中,并在该子程序中声明并操作它:
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;

这仅仅是举例说明(没有编译 :-)),因为你需要处理一些像数组大小无效之类的问题。


非常感谢。我完全不知道你可以做这样的事情。虽然这在函数和程序中基本上就是你所做的哈哈,但这很有道理。 - Shelby115

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接