目录
1.数组的初始化
1. 1 一维数组初始化
1.2多维数组初始化
1.3 不规则数组初始化
2.数组的访问
2.1 一维数组的引用
2.2 多维数组的引用
2.3 不规则数组的引用
语法形式1:
type [ ] arrayName = new type [size] { val1, val2, ……,valn };
数组声明与初始化同时进行时,size也就是数组元素的个数必须是常量,而且应该与大括号内的数据个数一致。
语法形式2:
type [ ] arrayName = new type [ ] { val1, val2, ……,valn };
省略size,由编译系统根据初始化表中的数据个数,自动计算数组的大小。
语法形式3:
type [ ] arrayName = { val1, val2, ……,valn };
数组声明与初始化同时进行,还可以省略new运算符。
语法形式4:
type [ ] arrayName ;
arrayName = new type [size] { val1, val2, ……,valn };
例如: 以下4种数组初始化实例都是等同的。
int [ ] nums = new int [10] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int [ ] nums = new int [ ] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int [ ] nums = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int [ ] nums ;nums = new int [10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
多维数组初始化是通过将对每维数组元素设置的初始值放在各自的一个大花括号内完成,以最常用的二维数组为例来讨论。
语法形式1:
type [ , ] arrayName = new type [size1, size2 ] {{ val11, val12, ……,val1n },
{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};
数组声明与初始化同时进行,数组元素的个数是size1*size2,数组的每一行分别用一个花括号括起来,每个花括号内的数据就是这行的每一列元素的值,初始化时的赋值顺序按矩阵的“行”存储原则。
语法形式2:
type [ ,] arrayName = new type [ , ] {{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};
省略size,由编译系统根据初始化表中花括号{}的个数确定行数,再根据{}内的数据确定列数,从而得出数组的大小。
语法形式3:
type [ , ] arrayName ={{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};
数组声明与初始化同时进行,还可以省略new运算符。
语法形式4:
type [ , ] arrayName ;
arrayName = new type [size1, size2] {{ val11, val12, ……,val1n },{ val21, val22, ……,val2n }, …… { valm1, valm2, ……,valmn }};
例如:以下数组初始化实例都是等同的。
int [, ] a = new int [3,4] {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int [, ] a = new int [, ] {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int [, ] a = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
int [,] a ;a = new int [3, 4] {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
不规则数组是一个数组的数组,所以它的初始化通常是分步骤进行的。
type [ ][ ] arrayName = new type [size] [ ];
size可以是常量或变量,后面一个中括号[ ]内是空着的,表示数组的元素还是数组且这每一个数组的长度是不一样,需要单独再用new运算符生成。
arrayName[0] = new type [size0] { val1, val2, ……, valn1};
arrayName[1] = new type [size1] { val1, val2, ……, valn2};
…………
不规则数组初始化实例:
char [ ] [ ] st1 = new char [3][ ];
// st1是由三个数组组成的数组
st1[0] = new char [ ] {‘S’, ’e’, ’p’, ’t’, ’e’, ’m’, ’b’, ’e’, ’r’ };
st1[1] = new char [ ] {‘O’, ’c’, ’t’, ’o’, ’b’, ’e’, ’r’};
st1[2] = new char [ ] {‘N’, ’o’, ’v’, ’e’, ’m’, ’b’, ’e’, ’r’ };
【数组声明应用举例】
下面是一个完整的C#程序,它声明并实例化上面所讨论的数组。
// arrays.cs
using System;
class DeclareArraysSample
{
public static void Main()
{
int[] numbers = new int[5]; // 一维数组
string[,] names = new string[5,4]; // 二维数组
byte[][] scores = new byte[5][]; // 数组的数组
for (int i = 0; i < scores.Length; i++)
{
scores[i] = new byte[i+3];
}
// 在每行输出数组的长度
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);
}
}
}
【输出】
Length of row 0 is 3
Length of row 1 is 4
Length of row 2 is 5
Length of row 3 is 6
Length of row 4 is 7
一维数组的引用语法形式:数组名[下标]
下标――数组元素的索引值,实际上就是要访问的那个数组元素在内存中的相对位移,记住相对位移是从0开始的,所以下标的值从0到数组元素的个数-1为止。
【例】定义一个数组,存放一组数据,找出这组数中最大数和最小数。
例如:数据分别是{89, 78, 65, 52, 90, 92, 73, 85, 91, 95}。
static void Main(string[] args)
{
int max, min;
int[] queue = new int[10] { 89, 78, 65, 52, 90, 92, 73, 85, 91, 95 };
max = min = queue[0];
for (int i = 1; i < 10; i++)
{
if (queue[i] > max) max = queue[i];
if (queue[i] < min) min = queue[i];
}
Console.WriteLine("最大数是{0},最小数是{1}", max, min);
Console.Read();
}
多维数组的引用语法形式:数组名[下标1, 下标2, …下标n]
【例】求两个矩阵的乘积。假定一个矩阵A为3行4列,另一个矩阵B为4行3列,根据矩阵乘法的规则,其乘积C为一个3行3列的矩阵。
static void Main(string[] args)
{
int i, j, k;
int[,] a = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
int[,] b = new int[4, 3] { { 12, 11, 10 }, { 9, 8, 7 }, { 6, 5, 4 }, { 3, 2, 1 } };
int[,] c = new int[3, 3];
//两个矩阵相乘
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
for (k = 0; k < 4; ++k)
c[i, j] += a[i, k] * b[k, j];
for (i = 0; i < 3; ++i)
{
for (j = 0; j < 3; ++j)
Console.Write("{0, 4:d}", c[i, j]);
Console.WriteLine();
}
Console.Read();
}
语法形式:数组名[下标1][下标2]……[下标n]