数组类型

数组类型定义了一组指定类型的元素序列,在方括号中填入下标值就可访问数组中的元素。定义数组时,方括号也用来指定可能的下标值。例如,下面的代码中定义了一个有
24
个整数的数组:

type
    DayTemperatures
= array [1..24] of
Integer;

在数组定义时,你需要在方括号中填入一个子界类型的值,或者用两个有序类型的常量定义一个新的子界类型,子界类型指定了数组的有效索引。由于子界类型指定了数组下标值的上界和下界,那么下标就不必象
C、C++、JAVA 和其他语言那样必须从零开始。

由于数组下标基于子界类型,因此 Delphi
能够对它们进行范围检查。不合法的常量子界类型将导致一个编译时间错误;如果选上编译器范围检查选项,那么超出范围的下标值将导致一个运行时间错误。

使用上述数组定义方法,定义一个
DayTemperatures
类型的变量如下:

type
    DayTemperatures
= array [1..24] of
Integer;

var 
    DayTemp1:
DayTemperatures;

procedure AssignTemp;
begin 
    DayTemp1 [1]
:= 54;
    DayTemp1 [2] :=
52;
...
    DayTemp1 [24] :=
66;
    DayTemp1 [25] := 67; // compile-time
error

数组可以是多维的,如下例:

type
    MonthTemps
= array [1..24, 1..31] of
Integer;
    YearTemps = array [1..24,
1..31, Jan..Dec] of
Integer;

这两个数组建立在相同的核心类型上,因此你可用前面定义的数据类型声明它们,如下面代码所示:

type
    MonthTemps
= array [1..31] of
DayTemperatures;
    YearTemps = array
[Jan..Dec] of
MonthTemps;

上例的声明把索引的次序前后调换了一下,但仍允许变量之间整块赋值。例如:把一月份的温度值赋给二月份:

var
    ThisYear:
YearTemps;

begin
    ...
    ThisYear[Feb]
:= ThisYear[Jan];

你也能定义下标从零开始的数组,不过这似乎不太合逻辑,因为你需要用下标 2
来访问数组第三项。然而,Windows 一直沿用了从零开始的数组(因为它是基于 C 语言的),并且 Delphi
控件库也在往这方向靠拢。

使用数组时,你总要用标准函数 Low 和 High 来检测它的边界,Low 和 High
返回下标的下界和上界。强烈建议使用 Low 和 High 操作数组,特别是在循环中,因为这样能使代码与数组范围无关,如果你改变数组下标的范围声明,Low 和
High 代码不会受影响;否则,如果代码中有一个数组下标循环体,那么当数组大小改变时你就不得不更新循环体的代码。Low 和 High
将使你的代码更易于维护、更稳定。

注意:顺便提一下,使用 Low 和 High
不会增加系统运行额外开销。因为在编译时,他们已被转换成常数表达式,而不是实际函数调用。其他简单的系统函数也是这样。

Delphi
主要以数组属性的形式使用数组。我们已经在 TimeNow 例子中看到过数组属性,也就是 ListBox 控件的 Items 属性。下一章讨论 Delphi
循环时,我将向你介绍更多有关数组属性的例子。

注意:Delphi 4 的 Object Pascal
中增加了动态数组,所谓动态数组是在运行时动态分配内存改变数组大小。使用动态数组很容易,不过我认为在这里讨论这类数组不合适。你将在第八章看到对 Delphi
动态数组的描述。

delphi 数组类型的更多相关文章

  1. delphi 数组类型与数组指针的巧妙利用

    {本例通过存取结构, 慢慢引入了数组类型与指针的一些使用方法; 其中六个小例子的测试内容和结果都是一样的. ---------------------------------------------- ...

  2. delphi数组之菜鸟篇

    数组是可以通过索引来引用的同类型数据的列表.按照存储空间的获取方式,Delphi支持的数组类型有两种,即静态数组和动态数组.所谓静态数组就是在声明时就已经确定大小的数组类型,而动态数组是指其大小在声明 ...

  3. Delphi - 数组 详解

    技术交流,DH讲解. 首先我们要知道什么是数组?数组是一堆相同特性数据的一个集合,也就是每个元素的类型必须是一样的,当然在其他一些弱语法的语言里面,数组的元素可以千奇百怪. 例子: ? 1 2 3 4 ...

  4. java中用spring实现数组类型输出

    java 中的几个数组类型 1.Department类 package com.yy.collection; import java.util.List; import java.util.Map; ...

  5. JS数组类型检测

    在强类型语言,数组类型检测是非常容易的事情(typeof就可以解决),而在弱语言JS数据类型就很容易混淆了. JS中常见的数据类型有:number.string.boolean.undefined.f ...

  6. C语言 数组类型与数组指针类型

    //数组类型与数组指针类型 #include<stdio.h> #include<stdlib.h> #include<string.h> void main(){ ...

  7. mybatis 处理数组类型及使用Json格式保存数据 JsonTypeHandler and ArrayTypeHandler

    mybatis 比 ibatis 改进了很多,特别是支持了注解,支持了plugin inteceptor,也给开发者带来了更多的灵活性,相比其他ORM,我还是挺喜欢mybatis的. 闲言碎语不要讲, ...

  8. JavaScript高级程序设计(十):数组类型

    先导: 访问对象属性使用的都是点表示法.另外,我们还可以使用方括号表示法来访问对象的属性.在使用方括号的时候,应该将要访问的属性以字符串的形式放到方括号中.这两种方法没有什么区别.但是方括号的优点是可 ...

  9. webservice调用接口,接口返回数组类型

    1. 其中sendSyncMsg1接口是方法名,Vector实现了List接口,xml是sendSyncMsg1的方法形参 Service service = new Service(); Call ...

随机推荐

  1. 强大的日志分析工具 -- NSLogger

    转:http://www.cnblogs.com/yingkong1987/p/3329945.html 强大的日志分析工具 -- NSLogger 源码:https://github.com/fpi ...

  2. hisi平台mii网络模式和rmii网络模式的uboot制作

    MII网络uboot编译说明 一:编译生成默认的uboot1. 进入到uboot目录a. cd /home/satan/Hi3518_SDK_V1.0.7.0/osdrv/uboot2. 新建临时文件 ...

  3. centos使用网易163yum源

    CentOS系统自带的更新源的速度实在是慢,为了让CentOS6使用速度更快的YUM更新源,可以选择163(网易)的更新源. 1.下载repo文件 wget http://mirrors.163.co ...

  4. POJ 2549 Sumsets

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10593   Accepted: 2890 Descript ...

  5. spring中的BeanFactory与ApplicationContext的作用和区别?

    BeanFactory类关系继承图 1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂, ...

  6. 38、FragmentStatePagerAdapter分页

    [ ViewPager ] ViewPager 如其名所述,是负责翻页的一个 View.准确说是一个 ViewGroup,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换.为 ...

  7. acdream 1056 (黑白染色)

    题意:给你一些关系,每个关系是两只马的名字,表示这两个马不能在一个分组里,问你能否将这些马分成两组. 黑白染色,相邻的点染不同颜色.bfs搞即可,水题. /* * this code is made ...

  8. Linux学习笔记:CentOS安装MySQL

    [1]安装版本: 1.1 CentOS-7-x86_64-Everything-1503-01    1.2 MySQL-5.6.27-1.linux_glibc2.5.x86_64.rpm-bund ...

  9. RabbitMQ (二)工作队列 -摘自网络

    这篇中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务.工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成.相反地,我们进行任务调度:我们把任务封装为消息发送给 ...

  10. 第二百六十天 how can I 坚持

    晚上去看了个电影,<万万没想到>,挺好看的,豆瓣评分不高.网络啊. 互联网会让聪明的人越来越聪明. 明天去看寻龙诀了. 懒惰会生根发芽,哈哈. 睡觉了.