Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用长度和大小参数声明固定长度字符串数组_Arrays_Ada - Fatal编程技术网

Arrays 使用长度和大小参数声明固定长度字符串数组

Arrays 使用长度和大小参数声明固定长度字符串数组,arrays,ada,Arrays,Ada,我希望能够为GTK组合框声明一个固定长度字符串的常量数组。在ADA中可以使用两个参数吗 此代码允许通过声明字符串来设置数组的大小。是否有可能以某种方式将规范中的常量替换为参数 简单数组不允许使用判别式。 鉴别记录不允许匿名数组 编辑: 我是否可以声明一个与表单等效的类型: 类型ArrayOfString(sringlength:正数; arraysize:的正(1..arraysize)数组 字符串(1..stringlength) 这种形式是不可能的,因为数组不能有判别式 或 子类型选择器字符

我希望能够为GTK组合框声明一个固定长度字符串的常量数组。在ADA中可以使用两个参数吗


此代码允许通过声明字符串来设置数组的大小。是否有可能以某种方式将规范中的常量替换为参数

简单数组不允许使用判别式。 鉴别记录不允许匿名数组

编辑:

我是否可以声明一个与表单等效的类型:

类型ArrayOfString(sringlength:正数; arraysize:的正(1..arraysize)数组 字符串(1..stringlength)

这种形式是不可能的,因为数组不能有判别式

子类型选择器字符串是字符串

类型选择器STRINGARAY(数组大小:正;字符串长度:正)为记录 stringarray:选择器字符串(1..stringlength)的数组(1..arraysize); 结束记录

此表单不可能,因为记录不能有匿名数组

答复:

以下工作:

包选择器。字符串是

子类型ArrayIndex的正范围为1..64;--组合框中的最大条目数

子类型TextIndex为正范围1..32;--最大入口长度

类型选择器或字符串数组是数组(数组索引范围、文本索引范围) 个性

函数StringSelector(stringarray:SelectorStringArray)返回ArrayIndex

sel:SelectorStringaray:=(“aa”、“bb”、“cc”、“dd”)

结束选择器。字符串

sel中的字符串长度必须相同

谢谢

老工程师

package Selectors.Strings is

    SelectorStringLength : constant := 2;

    subtype SelectorString is string( 1..SelectorStringLength );

    type    SelectorStringArray is array( positive range <> ) of SelectorString;

    subtype SelectorStringIndex is positive;

    function    StringSelector( stringarray : SelectorStringArray ) return SelectorStringIndex;

    selectarray : SelectorStringArray := ( "aa", "bb", "cc", "dd" );

end Selectors.Strings;
包选择器。字符串为
选择器字符串长度:常数:=2;
子类型SelectorString是字符串(1..SelectorStringLength);
类型选择器字符串数组是选择器字符串的数组(正范围);
亚型选择基因STRINGINDEX阳性;
函数StringSelector(stringarray:SelectorStringArray)返回SelectorStringIndex;
selectarray:SelectorStringArray:=(“aa”、“bb”、“cc”、“dd”);
结束选择器。字符串;

我不清楚您在寻找什么,但是上面的代码中没有任何匿名数组,您可以有一个判别记录类型,其组件是命名数组类型。所以我不确定你的陈述“鉴别记录不允许匿名数组”指的是什么

假设
selectarray
最多可以包含100个字符串:

subtype Select_Array_Size is Integer range 0 .. 100;  

type Selector_Strings (Size : Select_Array_Size := 0) is record
    Data : SelectorStringArray (1 .. Size);
end record;

procedure Set_Select_Array (Data : SelectorStringArray);

selectarray : Selector_Strings;  -- will be initialized with Size=>0, 
                                 -- Data=>an array of length 0
在身体里

procedure Set_Select_Array (Data : SelectorStringArray) is
begin
    selectarray := (Size => Data'Length, Data => Data);
end Set_Select_Array;
然后使用
selectarray.Data
而不是
selectarray
来访问数据

您需要最大数组长度,因为某些编译器将为
选择器\u字符串的
数据
组件分配尽可能多的空间


另一个选项是使
selectarray
成为对数组类型的
access

“是否可以用参数替换规范中的常量”。。。什么的参数?你是说你想添加一个
程序
,该程序接受
SelectorStringaray
参数并设置
selectarray
?P.S.
Ada
是一种计算机语言,
Ada
是一个牙医专业协会。