编程知识 cdmana.com

图灵四期java架构师

数组(Array)是有序的元素序列。[1]若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。[1]这些有序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
中文名
数组
外文名
Array
分类
一维、二维(矩阵)、三维数组
定义
同类数据元素的集合
快速
导航
数组中的元素结构形式相关操作数组类型表示方法赋值方法使用规则常用函数
产生来源
在C语言中, 数组[2]属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持[3],但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了[4]。
如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。
此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。
一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。
如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。
compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。
原型可以这样写(假设数组的元素是type):
int compact(type *Array,int Count)
数组类型说明 在C语言中使用数组必须先进行类型说明。
数组说明的一般形式为:类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
数组就是一次性定义相同数据类型的一组变量数组定义。
举例
说明整型数组a,有10个元素。若要表示第10个元素,则使用a[9]。第一个则是a[0]。
int a[10];
说明实型数组b,有10个元素,实型数组c,有20个元素。
float b[10],c[20];
说明字符数组ch,有20个元素。
char ch[20];
特点
1.数组是相同数据类型的元素的集合。
2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
对于VB的数组,表示数组元素时应注意:
1下标要紧跟在数组名后,而且用圆括号括起来(不能用其他括号)。
2下标可以是常量,变量,或表达式,但其值必须是整数(如果是小数将四舍五入为整数)。
3下标必须为一段连续的整数,其最小值成为下界,其最大值成为上界。不加说明时下界值默认为1。
数组中的元素
与结构或类中的字段的区别
数组中的所有元素都具有相同类型(这一点和结构或类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(这一点也和结构和类中的字段不同,它们通过名称来访问)。[1]
类型
数组元素并非只能是基元数据类型,还可以是结构、枚举或类。[1]
结构形式
栈内存
在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码中定义一个变量时,java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,java会自动释放掉为该变量所分配的内存空间。
堆内存
堆内存用来存放由new运算符创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。在堆中创建了一个数组或对象后,同时还在栈内存中定义一个特殊的变量。让栈内存中的这个变量的取值等于数组或者对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。[5]
与结构或类中的字段的区别
数组中的所有元素都具有相同类型(这一点和结构或类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(这一点也和结构和类中的字段不同,它们通过名称来访问)。[1]
相关操作
声明固定大小的数组
有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:
(1)建立公用数组,在模块的声明段用 Public语句声明数组。
(2)建立模块级数组,在模块的声明段用 Private语句声明数组。
(3)建立局部数组,在过程中用 Private语句声明数组。
设定上下界
声明数组时,在数组名之后跟一个用括号括起来的上界。
上界不得超过 Long数据类型的范围(-2,147,483,648 到 2,147,483,647)。
例如,下列数组声明可出现、在模块的声明段:
Dim Counters (14) As Integer '15 个元素。
Dim Sums (20) As Double '21 个元素。
为建立公用数组,直接用 Public 取代 Dim。
Public Counters (14) As Integer
Public Sums (20) As Double
在过程之中同样的声明使用 Dim:
Dim Counters (14) As Integer
Dim Sums (20) As Double
第一个声明建立了一个有 15 个元素的数组,其索引号从 0 到 14。
第二个声明建立了一个有 21 个元素的数组,其索引号从 0 到 20。缺省的下界为 0。
为了规定下界,用关键字 To 显式提供下界(为 Long数据类型):
Dim Counters (1 To 15) As Integer
Dim Sums (100 To 120) As String
在前述声明中,Counters 的索引值范围从 1 到 15,而 Sums 的索引值范围从 100 到 120。
包含其它数组的数组
有可能建立 Variant数据类型数组,并与不同数据类型的数组共居一处。
以下代码建立两个数组,一个包含整数,而另一个包含 字符串。然后声明第三个 Variant 数组,并将整数和字符串数组放置其中:
Private Sub Command1_Click ()
Dim intX As Integer 声明计数器变量。
声明并放置整数数组。
Dim countersA (5) As Integer
For intX = 0 To 4
countersA (intX) = 5
Next intX
声明并放置字符串数组。
Dim countersB (5) As String

版权声明
本文为[vx_itstudy01]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000038620711

Scroll to Top