小智 12
所以这是一个非常古老的问题,但它在搜索结果的早期出现,所以让我给出正确的答案.
Conformant Array不是一个动态数组,它调整自身大小以适应数据,如Java的List类.它是一种允许Pascal过程和函数与可变大小数组一起工作的机制.
在Pascal中,数组的大小是其类型的一部分,因此在:
VAR
MyArray1 : ARRAY [1..10] OF INTEGER;
MyArray2 : ARRAY [1..20] OF INTEGER;
Run Code Online (Sandbox Code Playgroud)
MyArray1并且MyArray2有两种不同的类型且不兼容.
这成为经典Pascal中的过程/函数的问题:因为过程的形式参数必须具有特定类型,并且因为数组的长度是其类型的一部分,所以通常不可能定义有效的过程/函数在任意长度的数组上.
Conformant Arrays是作为ISO标准Pascal的一部分引入的,通过允许以"符合数组"作为参数定义过程/函数来解决此问题,如下所示:
PROCEDURE MyProc(VAR x : ARRAY [low..high : INTEGER] OF INTEGER;
Run Code Online (Sandbox Code Playgroud)
这定义了MyProc具有三个形式参数的过程:x,, low和high(即,有三个参数以任意名称传递).调用过程时,x将其设置为指向数组的指针,是设置为数组low下限的整数变量,是设置为数组high上限的整数变量.
此机制允许数组边界以类型安全的方式与数组一起传递,并允许过程使用任意大小的数组.这是ISO标准Pascal定义的一个特性,但其他Pascals(例如Extended Pascal和Borland Pascal)提出了不同的机制来处理这个问题(例如,扩展Pascal的类型模式,它更丰富,更复杂).