最简单的是一维数组,它只有一个indexType,比如:
var MyArray: array[1..100] of Char;
声明了一个变量MyArray,它是一个有100个字符的数组。给定上面的声明,MyArray[3]表示数组中的第3个字符。若声明了一个静态数组,虽然并没有给每一个元素赋值,但未用的元素仍分配内存并包含一个随机值,这和未初始化的变量类似。
A multidimensional array is an array of arrays. For example,
一个多维数组是数组的数组,比如:
type TMatrix = array[1..10] of array[1..50] of Real;
就等价于
type TMatrix = array[1..10, 1..50] of Real;
不论用哪种方式声明,它表示一个有500个实数值的数组。一个TMatrix类型的变量MyMatrix,可使用这样的索引:MyMatrix[2,45],或像这样:MyMatrix[2][45]。同样,
packed array[Boolean,1..10,TShoeSize] of Integer;
就等价于
packed array[Boolean] of packed array[1..10] of packed array[TShoeSize] of Integer;
标准函数Low和High作用于数组类型(的标志符)或变量,它们返回数组第1个索引(类型)的最小值和最大值;Length返回数组第1维的元素个数。
一维、
一维、压缩的(packed)、Char类型的静态数组称为packed string,它和字符串类型兼容,也和其它具有相同元素个数的packed string兼容。请参考Type compatibility and identity。
array[0..x] of Char类型的数组,是0下标开始的字符数组,它用来存储零结尾字符串,并且和PChar类型兼容。参考Working with null-terminated strings。
- 56 -
Data types, variables and constants
Dynamic arrays(动态数组)
动态数组没有固定大小和长度,相反,当你给它赋值或把它传给SetLength函数时,它的内存被重新分配。动态数组以下面的形式声明:
array of baseType
比如
var MyFlexibleArray: array of Real;
声明一个实数类型的一维动态数组。声明并没有为MyFlexibleArray分配内存,要在内存中创建数组,要调用SetLength。比如,以上面的声明为例:
SetLength(MyFlexibleArray, 20);
分配一个由20个实数构成的数组,索引号从0到19。动态数组的索引总是整数,并从0开始。动态数组变量实际是指针,并和长字符串一样使用引用计数进行管理。要取消动态数组的分配,给它的变量赋值nil,或者把变量传给Finalize。在没有其它引用的情况下,这两种方法都将消除数组。0长度动态数组的值为nil。不要对一个动态数组变量使用运算符‘^’,也不要对它使用New或Dispose过程。若X和Y是同一类型的动态数组变量,X := Y使X指向和Y相同的数组(在这个操作之前,不必给分配内存)。不像字符串和静态数组,动态数组不会在被写之前自动拷贝。比如,在下面的代码执行后
var
A, B: array of Integer;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-38.html
早
然后可以直接干过去