Ada动态数组分配索引范围

Jim*_*Jim 2 ada

我如何更改此代码以强制索引以第一个索引'首先评估为1和最后一个索引'开始?最后评估为'长度?

  Menu_Text_Ptr := new Packed_Message_Array_Type'("A...",
                                                  "B...",
                                                  "C...",
                                                  "D...");
Run Code Online (Sandbox Code Playgroud)

我有几个像这样的动态数组,它们的长度各不相同.我宁愿不放置最后一个索引值的显式长度,因为这会使代码维护更复杂一些.我宁愿只是在分配语句中添加或减去内容,让编译器弄明白.

就目前而言,第一个索引'First评估为-2147483648(可能类似于0x80000000).

有可能做我要问的事吗?

这是GNAT上的Ada83.

Kei*_*son 5

如果您的第一个索引是-2147483648(-2 31),那么您可能已将数组类型定义Packed_Message_Array_Type为:

type Packed_Message_Array_Type is array(Integer range <>) of Some_Type;
Run Code Online (Sandbox Code Playgroud)

如果将索引类型更改IntegerPositive(这是Integer下限为1 的子类型),则默认下限为1.

通常,如果定义指定其初始值但未指定下限的数组变量,则下限将默认为索引类型的下限.

(我删除了部分答案;我认为你可以只为第一个元素定义索引,但位置关联不能遵循命名关联.)