C#数组的声明、初始化和使用(附带实例)
假设正在编写一个程序,需要保存一个班级中每个学生的数学成绩(假定是整数),共有 5 个学生,就需要声明 5 个整型变量来保存每个学生的成绩,代码如下:
数组是具有相同数据类型的一组数据的集合,例如,球类的集合—足球、篮球、羽毛球等;电器集合—电视机、洗衣机、电风扇等。前面学过的变量用来保存单个数据,而数组则保存的是多个相同类型的数据。
数组与变量的比较效果如下图所示:

图 1 数组与变量的比较效果
数组中的每一个变量被称为数组的元素,数组能够容纳元素的数量被称为数组的长度。数组中的每个元素都具有唯一的索引与其相对应,数组的索引从零开始。
数组是通过指定数组的元素类型、数组的秩(维数)及数组每个维度的上限和下限来定义的,即一个数组的定义需要包含以下几个要素:
数组的组成要素如下图所示:

图 2 数组的组成要素
在程序设计中引入数组可以更有效地管理和处理数据,根据数组的维数将数组分为一维数组、多维数组和不规则数组等。
通常,我们所说的数组指的就是一维数组,本节重点讲解一维数组的用法。
一维数组实质上是一组相同类型数据的线性集合,例如,学校学生们排列的一字长队就是一个数组,每一位学生都是数组中的一个元素;又如,把一家快捷酒店看作一个一维数组,那么酒店里的每个房间都是这个数组中的元素。
一维数组的创建有以下两种形式。
例如,声明一维数组,代码如下:
为数组分配内存空间的语法格式如下:
例如,为数组分配内存,代码如下:
以上代码表示要创建有 5 个元素的一个整型数组,其数据存储形式如下图所示:

图 3 一维数组的数据存储形式
在上图中,arr 为数组名称,中括号“[ ]”中的值为数组的索引。数组通过索引来区分数组中不同的元素。数组的索引是从 0 开始的。由于创建的数组 arr 中有 5 个元素,因此数组中元素的索引为 0~4。
在上面的代码中,定义了一个长度为 5 的数组,如果使用 arr[5],将会引起索引超出范围异常,因为数组的索引是从 0 开始的。索引超出范围的异常提示如下图所示。

图 4 索引超出范围的异常提示
int score1,score2,score3,score4,score5;如果是 100 个学生,难道要定义 100 个整型变量吗?这显然是不现实的,那怎么办呢?这时就可以使用数组来实现。
数组是具有相同数据类型的一组数据的集合,例如,球类的集合—足球、篮球、羽毛球等;电器集合—电视机、洗衣机、电风扇等。前面学过的变量用来保存单个数据,而数组则保存的是多个相同类型的数据。
数组与变量的比较效果如下图所示:

图 1 数组与变量的比较效果
数组中的每一个变量被称为数组的元素,数组能够容纳元素的数量被称为数组的长度。数组中的每个元素都具有唯一的索引与其相对应,数组的索引从零开始。
数组是通过指定数组的元素类型、数组的秩(维数)及数组每个维度的上限和下限来定义的,即一个数组的定义需要包含以下几个要素:
- 元素类型;
- 数组的维数;
- 每个维数的上下限。
数组的组成要素如下图所示:

图 2 数组的组成要素
在程序设计中引入数组可以更有效地管理和处理数据,根据数组的维数将数组分为一维数组、多维数组和不规则数组等。
通常,我们所说的数组指的就是一维数组,本节重点讲解一维数组的用法。
一维数组实质上是一组相同类型数据的线性集合,例如,学校学生们排列的一字长队就是一个数组,每一位学生都是数组中的一个元素;又如,把一家快捷酒店看作一个一维数组,那么酒店里的每个房间都是这个数组中的元素。
C#一维数组的创建
数组作为对象,允许使用 new 关键字进行内存分配。在使用数组之前,首先必须定义数组变量所属的类型。一维数组的创建有以下两种形式。
1) 先声明,再用 new 关键字进行内存分配
声明一维数组使用以下形式:数组元素类型[ ] 数组名字;数组元素类型决定了数组的数据类型,它可以是 C# 中任意的数据类型。数组名字为一个合法的标识符,符号“[]”表明是一个数组。单个“[]”表示要创建的数组是一个一维数组。
例如,声明一维数组,代码如下:
int[] arr; // 声明int型数组,数组中的每个元素都是int型 string[] str; // 声明string型数组,数组中的每个元素都是string型声明数组后,还不能访问它的任何元素,因为声明数组只是给出了数组名字和元素的数据类型,要想真正使用数组,还要为它分配内存空间。在为数组分配内存空间时,必须指明数组的长度。
为数组分配内存空间的语法格式如下:
数组名字 = new 数组元素类型[数组元素的个数];通过上面的语法可知,使用 new 关键字分配数组时,必须指定数组元素的类型和数组元素的个数,即数组的长度。
例如,为数组分配内存,代码如下:
arr = new int[5];使用 new 关键字为数组分配内存时,整型数组中各个元素的初始值都为 0。
以上代码表示要创建有 5 个元素的一个整型数组,其数据存储形式如下图所示:

图 3 一维数组的数据存储形式
在上图中,arr 为数组名称,中括号“[ ]”中的值为数组的索引。数组通过索引来区分数组中不同的元素。数组的索引是从 0 开始的。由于创建的数组 arr 中有 5 个元素,因此数组中元素的索引为 0~4。
在上面的代码中,定义了一个长度为 5 的数组,如果使用 arr[5],将会引起索引超出范围异常,因为数组的索引是从 0 开始的。索引超出范围的异常提示如下图所示。

图 4 索引超出范围的异常提示
2) 声明的同时为数组分配内存
这种创建数组的方法是将数组的声明和内存的分配合并在一起执行。语法如下:数组元素类型[] 数组名 = new 数组元素类型[数组元素的个数];例如,声明并为数组分配内存,代码如下:
int[] month = new int[12];上面的代码创建数组 month,并指定了数组长度为 12。
C#一维数组的初始化
数组的初始化主要分为两种:为单个数组元素赋值和同时为整个数组赋值。1) 为单个数组元素赋值
为单个数组元素赋值即首先声明一个数组,并指定长度,然后为数组中的每个元素赋值,例如:int[] arr = new int[5]; // 定义一个int类型的一维数组 arr[0] = 1; // 为数组的第1个元素赋值 arr[1] = 2; // 为数组的第2个元素赋值 arr[2] = 3; // 为数组的第3个元素赋值 arr[3] = 4; // 为数组的第4个元素赋值 arr[4] = 5; // 为数组的第5个元素赋值使用这种方式对数组进行赋值时,通常使用循环实现,例如,上面的代码可以修改为如下形式:
int[] arr = new int[5]; // 定义一个int类型的一维数组 for (int i = 0; i < arr.Length; i++) // 遍历数组 { arr[i] = i + 1; // 为遍历到的数组元素赋值 }在第 2 行代码中的 arr.Length 用来获取数组的长度。注意,数组大小必须与大括号中的元素个数相匹配,否则会产生编译错误。
2) 同时为整个数组赋值
同时为整个数组赋值时需要使用大括号,将要赋值的数据包含在大括号中,并用逗号(,)隔开。例如:string[] arrStr = new string[7] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; string[] arrStr = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; string[] arrStr = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };以上 3 种形式实现的效果是一样的,都是定义了一个长度为 7 的 string 类型数组,并进行了初始化,其中,后两种形式会自动计算数组的长度。
C#一维数组的使用
【实例 1】创建一个控制台应用程序,其中定义了一个 int 类型的一维数组,实现将各月的天数输出,代码如下:static void Main(string[] args) { // 定义并初始化一维数组 int[] day = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; for (int i = 0; i < 12; i++) // 利用循环将信息输出 { Console.WriteLine((i + 1) + "月有" + day[i] + "天"); // 输出的信息 } Console.ReadLine(); }第 7 行代码中的 day[i] 用来获取遍历到的数组元素。程序运行结果为:
1月有31天
2月有28天
3月有31天
4月有30天
5月有31天
6月有30天
7月有31天
8月有31天
9月有30天
10月有31天
11月有30天
12月有31天