版权归原作者所有,如有侵权,请联系我们

[科普中国]-默认数组大小

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

默认数组大小即程序已经设定好的数组大小。这里的数组可以是一维数组、二维数组以及多维数组,主要与具体应用有关。例如,在C语言中,申请内存空间使用的默认数组大小就是一维数组;又例如在数据库,二维表就是一个二维数组,其设定的大小可以当做是默认数组大小。

二维表概述在关系模型中,数据结构表示为一个二维表,一个关系就是一个二维表(但不是任意一个二维表都能表示一个关系,例如两个元组的候选键相同即表中的任意两行相同,就不能表示一个关系。1),二维表名就是关系名。表中的第一行通常称为属性名,表中的每一个元组和属性都是不可再分的,且元组的次序是无关紧要的。常用的关系术语如下:

记录 二维表中每一行称为一个记录,或称为一个元组。

字段 二维表中每一列称为一个字段,或称为一个属性。

域 即属性的取值范围。

性质二维表一般满足下面7个性质:

(1)二维表中元组个数是有限的——元组个数有限性;

(2)二维表中元组均不相同——元组的唯一性;

(3)二维表中元组的次序可以任意交换——元组的次序无关性;

(4)二维表中元组的分量是不可分割的基本数据项——元组分量的原子性;

(5)二维表中属性名各不相同——属性名唯一性;

(6)二维表中属性与次序无关,可任意交换——属性的次序无关性;

(7)二维表属性的分量具有与该属性相同的值域——分量值域的统一性。

一维数组一维(或单维)数组是一种线性数组,其中元素的存取是以行或列索引的单一下标表示。

譬如考虑C编程语言的数组宣告

int anArrayName [10];

语法为:

datatype anArrayname [sizeofArray];

在上述范例中,被宣告的数组将包含int型别的10个元素,可为任何整数值。这样,数组元素的

索引下标则为0-9(含)。例如,anArrayName[0]和anArrayName[9]分别是第一个和最后一个元素的表达。

对于以线性定址的向量,索引为i的元素处于位址B+c×i,其中B是固定的基底位址,c为常数,

有时称为位址增量或跨步。

如果有效的元素索引从0开始,则常数B只是数组第一个元素的位址。因此C语言指定

数组的索引一定从0开始;许多开发人员会将该元素称为“第零”而不是“第一”。

然而若适当选择基底位址B,来作为第一个元素的索引起始值。譬如数组有五个元素,索引为1到5,基底位址B以B+30c来替换,则相同数组的这些元素索引将转为31到35。如果编号从0开始,则常数B可能不是任何元素的位址。

二维数组前面介绍的数组只有一个下标,称为一维数组, 其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的, 因此C语言允许构造多维数组。多维数组元素有多个下标, 以标识它在数组中的位置,所以也称为多下标变量。本小节只介绍二维数组,多维数组可由二维数组类推而得到。二维数组类型说明的一般形式是:

类型说明符数组名[常量表达式1][常量表达式2]…;

其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:

int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:

a[0][0],a[0][1],a[0][2],a[0][3]

a[1][0],a[1][1],a[1][2],a[1][3]

a[2][0],a[2][1],a[2][2],a[2][3]

二维数组在概念上是二维的,即是说其下标在两个方向上变化, 下标变量在数组中的位置也处于一个平面之中, 而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。在如上中,按行顺次存放,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个 字节(图中每一格为一字节)。

多维数组普通数组采用一个整数来作下标。多维数组(高维数组)的概念特别是在数值计算和图形应用方面非常有用。我们在多维数组之中采用一系列有序的整数来标注,如在[ 3,1,5 ] 。这种整数列表之中整数的个数始终相同,且被称为数组的“维度”。关于每个数组维度的边界称为“维”。维度为k的数组通常被称为k维。

多维数组的数组名字,在表达式中自动转换为数组首元素地址值,但这个首元素实际上是去除数组下标第一维之后的数组剩余部分。例如:

int a[10][15];

int (*p)[15]=a; // a在表达式中自动转换为指向具有15个int的数组的指针值。

声明固定大小的数组有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:

建立公用数组,在模块的声明段用 Public语句声明数组。

建立模块级数组,在模块的声明段用 Private语句声明数组。

建立局部数组,在过程中用 Private语句声明数组。

数组类型数组类型变量采用如下方法表示,即一个基类型后面带有空的中括号[ ]。还有一种做法,Java接受C风格的声明,即在数组名后可以放置中括号。

以下声明是等价的:

int [ ] arrayOfInts;

int arrayOfInts [ ];

无论哪一种情况,array Of Ints均声明为一个整型数组。此数组的大小尚不可知,因为我们只定义了数组类型变量。至此还没有创建此数组类的一个具体实例,即没有为之关联存储空间。声明一个数组类型变量时指定数组的长度甚至是不可能的。[2]

对象数组可以采用同样的方式创建:

String [ ] someStrings;

Button someButtons [ ];