Массив задает способ организации данных. Массивом называют упорядоченную совокупность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов. Число индексов характеризует размерность массива. Каждый индекс изменяется в некотором диапазоне [a,b]. В языке C#, как и во многих других языках, индексы задаются целочисленным типом.
Объявление одномерного массива выглядит следующим образом:
<тип>[] <объявители>;
Заметьте, в отличие от языка C++ квадратные скобки приписаны не к имени переменной, а к типу. Они являются неотъемлемой частью определения класса, так что запись T[] следует понимать как класс одномерный массив с элементами типа T.
Что же касается границ изменения индексов, то эта характеристика к классу не относится, она является характеристикой переменных - экземпляров, каждый из которых является одномерным массивом со своим числом элементов, задаваемых в объявителе переменной.
Как и в случае объявления простых переменных, каждый объявитель может быть именем или именем с инициализацией. В первом случае речь идет об отложенной инициализации. Нужно понимать, что при объявлении с отложенной инициализацией сам массив не формируется, а создается только ссылка на массив, имеющая неопределенное значение Null. Поэтому пока массив не будет реально создан и его элементы инициализированы, использовать его в вычислениях нельзя. Вот пример объявления трех массивов с отложенной инициализацией:
int[] a, b, c;
Чаще всего при объявлении массива используется имя с инициализацией. И опять-таки, как и в случае простых переменных, могут быть два варианта инициализации. В первом случае инициализация является явной и задается константным массивом. Вот пример:
double[] x= {5.5, 6.6, 7.7};
Следуя синтаксису, элементы константного массива следует заключать в фигурные скобки.
Во втором случае создание и инициализация массива выполняется в объектном стиле с вызовом конструктора массива. И это наиболее распространенная практика объявления массивов. Пример:
int[] d= new int[5];
Итак, если массив объявляется без инициализации, то создается только висячая ссылка со значением void. Если инициализация выполняется конструктором, то в динамической памяти создается сам массив, элементы которого инициализируются константами соответствующего типа (ноль для арифметики, пустая строка для строковых массивов), и ссылка связывается с этим массивом. Если массив инициализируется константным массивом, то в памяти создается константный массив, с которым и связывается ссылка.
Рассмотрим первый пример работы с массивами:
using System; namespace Arrays { class Program { private static Random rnd = new Random(); static void Main(string[] args) { //объявляются три одномерных массива A,B,C int[] A = new int[5], B = new int[5], C = new int[5]; CreateOneDimAr(A); CreateOneDimAr(B); for (int i = 0; i < 5; i++) C[i] = A[i] + B[i]; //объявление массива с явной инициализацией int[] x ={ 5, 5, 6, 6, 7, 7 }; //объявление массивов с отложенной инициализацией int[] u, v; u = new int[3]; for (int i = 0; i < 3; i++) u[i] = i + 1; //v= {1,2,3}; //присваивание константного массива //недопустимо v = new int[4]; v = u; //допустимое присваивание int[,] w = new int[3, 5]; //v=w; //недопустимое присваивание: объекты разных классов PrintAr1("A", A); PrintAr1("B", B); PrintAr1("C", C); PrintAr1("X", x); PrintAr1("U", u); PrintAr1("V", v); Console.ReadLine(); } public static void CreateOneDimAr(int[] A) { for(int i = 0; i<A.GetLength(0);i++) A[i] = rnd.Next(1,100); }//CreateOneDimAr public static void PrintAr1(string name, int[] A) { Console.WriteLine(name); for(int i = 0; i<A.GetLength(0);i++) Console.Write("\t" + name + "[{0}]={1}", i, A[i]); Console.WriteLine(); }//PrintAr1 } }
На что следует обратить внимание, анализируя этот текст:
Здесь rnd - это статическое поле класса , объявленное следующим образом:
private static Random rnd = new Random();