C#数组Array的基础知识及二位数组和数组的数组的区别
首先了解一下C#关于数组的一些基础知识:
1、数组Array都隐士派生自System.Array抽象类,而System.Array类又继承自System.Object基类,(事实上数组都隐士实现了IEnumerable,ICollection,IList接口) 所以C#中的数组都始终是引用类型,
变量和字段中包含的是数组的引用,而不是数组本身的元素。
2、因为是引用类型,所以数组都是在托管堆中分配的。
3、数组作为实参传递给一个方法时,实际传递的是对该数组的引用。因此被调用的方法能修改数组的元素。
4、Array.Copy提供的数组拷贝方法,是一个浅拷贝,也就说如果数组元素是引用类型,新数组将引用源数组的对象。
5、C#数组默认是0基数数组(索引从0开始),一维0基数组也称为向量,向量的性能是最佳,因为CLR使用了一些特殊的IL指令来优化向量的操作。
6、C#支持多维数组,如二维数组可以想象成一个矩阵,三维数组可以想象成一个立体空间,定义如下:
//创建一个二维数组,由double组成。
Double[,] myDoubles = new Double[10,20];
//创建一个三维数组,由String引用构成。
String[,,] myStrings = new String[4,5,10];
7、CLR支持数组的数组,即交错数组(jagged array)。
交错数组定义如下:
//创建一个含有Point数组的一维数组,即一个交错数组//注意定义方式与多维数组的区别
Point[][] myGraphic = new Point[3][];
//引用了含有10个Point实例的数组
myGraphic[0] = new Point[10];
//引用了含有20个Point实例的数组
myGraphic[1] = new Point[20];
//引用了含有30个Point实例的数组
myGraphic[2] = new Point[30];
//显示第一个图形。
for(int i=0;i<myGraphic[0].Length;i++)
Console.WriteLine(myGraphic[0][i]);
下面说说面试中经常被问到的问题:二位数组和数组的数组的区别。
二维数组是按照指定的类型的一组数,比如 int [2,3]那就是说一个两行三列的矩阵,每一个元素都是一个整型数的数组。
交错数组int[2][],指的是这个数组有两个元素,每一个元素都是一个整型的数组,但是长度可以不一样,
比如
//交错数组,第一维有10个元素,第二维有8个元素。
int [][] arr= new int[2][];
int [0][]=new int[10];
int [1][]=new int[8];
参考:《CLR via C#》3th