数组

概述

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

关于可变长数组(VLA)的问题:原来的C标准中是不允许可变长数组出现的,但是在C++中,加入了对VLA的支持,也有不少编译器已经支持这个了,而且好像没有太多的人用这个可变长数组。

如果有过用其它语言编程的经历,那么想必会熟悉数组的概念。由于有了数组,可以用相同名字引用一系列变量,并用数字(索引)来识别它们。在许多场合,使用数组可以缩短和简化程序,因为可以利用索引值设计一个循环,高效处理多种情况。数组有上界和下界,数组的元素在上下界内是连续的。因为 Visual Basic对每一个索引值都分配空间,所以不要不切实际声明一个太大的数组。

此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。

一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。

如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。

compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。

原型可以这样写(假设数组的元素是type):

int compact(type *Array,int Count)

数组类型说明 在C语言中使用数组必须先进行类型说明。

数组说明的一般形式为:类型说明符 数组名 [常量表达式],……; 其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。

软道语录

数组

数组就是一次性定义相同数据类型的一组变量数组定义。

相关例子

  int a[10]; 说明整型数组a,有10个元素

  float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素

  char ch[20]; 说明字符数组ch,有20个元素。

特点

1.数组是相同数据类型的元素的集合。

2.数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。

3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a代表数组a的第二个元素,以此类推。

对于VB的数组,表示数组元素时应注意。

1下标要紧跟在数组名后,而且用圆括号括起来(不能用其他括号)。

2下标可以是常量,变量,或表达式,但其值必须是整数(如果是小数将四舍五入为整数)。

3下标必须为一段连续的整数,其最小值成为下界,其最大值成为上界。不加说明时下界值默认为1。

2结构形式

编辑
 

栈内存

  在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码中定义一个变量时,java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,java会自动释放掉为该变量所分配的内存空间。

堆内存

  堆内存用来存放由new运算符创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理。在堆中创建了一个数组或对象后,同时还在栈内存中定义一个特殊的变量。让栈内存中的这个变量的取值等于数组或者对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量实际上保存的是数组或对象在堆内存中的地址(也称为对象的句柄),以后就可以在程序中使用栈的引用变量来访问堆中的数组或对象。

3相关操作

编辑

声明固定大小的数组

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

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

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

  建立局部数组,在过程中用 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

  For intX = 0 To 4

  countersB (intX) = "hello"

  Next intX

  Dim arrX (2) As Variant 声明拥有两个成员的新数组。

  arrX (1) = countersA () 将其它数组移居到数组。

  arrX (2) = countersB ()

  MsgBox arrX (1) (2) 显示每一个数组的成员。

  MsgBox arrX (2) (3)

  End Sub

php数组的定义、调用和修改

array() 创建数组,带有键和值。如果在规定数组时省略了键,则生成一个整数键,这个 key 从 0 开始,然后以 1 进行递增。

要用 array() 创建一个关联数组,可使用 => 来分隔键和值。

语法

  array(key => value)

  参数key可选。规定 key,类型是数值或字符串。如果未设置,则生成整数类型的 key。

  value必需。规定值。

  <h3>color="#CC6600">输出aaaaaabbbbbb

  php

  $array = array("key1" => "aaaaaa", 2 => "bbbbbb"); //数组的创建

  echo $array["key1"]; //输出aaaaaa

  echo $array[2]; //输出bbbbbb

  ?>

4数组类型

编辑
 

多维数组

  有时需要追踪记录数组中的相关信息。

  例如,为了追踪记录计算机屏幕上的每一个像素,需要引用它的 X、Y坐标。这时应该用多维数组存储值。

  可用 Visual Basic 声明多维数组

  例如,下面的语句声明了一个过程内的 10 × 10 的二维数组

  Static MatrixA (9,9) As Double

  可用显式下界来声明两个维数或两个维数中的任何一个:

  Static MatrixA (1 To 10,1 To 10) As Double

  可以将所有这些推广到二维以上的数组。例如:

  Dim MultiD (3,1 To 10,1 To 15)

  这个声明建立了三维数组,大小为 4 × 10 × 15。元素总数为三个维数的乘积,为 600。

  注意

  在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间

用循环操作数组

  可以用 For循环嵌套有效的处理多维数组。例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值:

  Dim I As Integer,J As Integer

  Static MatrixA(1 To 10,1 To 10) As Double

  For I = 1 To 10

  For J = 1 To 10

  MatrixA (I,J) = I * 10 + J

  Next J

  Next I

原文地址:https://www.cnblogs.com/liaoliao/p/5006203.html