Массивом называют упорядоченную совокупность элементов одного типа. Каждый элемент массива имеет индекс, определяющий его положение в массиве. Кроме того, индексы используются для доступа к элементам массива. Индексация массивов начинается с нуля: массив с n элементами индексируется от 0 (начальный элемент) до n-1 (конечный элемент).
Массив может быть одномерным, многомерным или массивом массивов. Число индексов характеризует размерность массива.
Объявление одномерного массива выглядит следующим образом:
<тип>[] <имяМассива>;
Заметьте, в отличие от языка 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();