Одномерные массивы используются в программах чаще всего. Варианты описания массива:
тип[] имя;
тип[] имя = new тип [ размерность ];
тип[] имя = { список_инициализаторов };
тип[] имя = new тип [] { список_инициализаторов };
тип[] имя = new тип [ размерность ] { список_инициализаторов };
Примеры описаний (один пример для каждого варианта описания):
int[] a; // 1 элементов нет
int[] b = new int[4]; // 2 элементы равны 0
int[] с = { 61, 2, 5, -9 }; // 3 new подразумевается
int[] d = new int[] { 61, 2, 5, -9 }: // 4 размерность вычисляется
int[] e = new int[4] { 61, 2, 5, -9 }; // 5 избыточное описание
Здесь описано пять массивов. Отличие первого оператора от остальных состоит в том, что в нем, фактически, описана только ссылка на массив, а память под элементы массива не выделена. Если список инициализации не задан, размерность может быть не только константой, но и выражением типа, приводимого к целому.
В более общем виде: можно преобразовать массив, состоящий из элементов некоторого класса а, в массив, состоящий из элементов типа, являющегося базовым для a.
В каждом из остальных массивов по четыре элемента целого типа. Как видно из операторов 3-5, массив при описании можно инициализировать. Если при этом не задана размерность (оператор 3), количество элементов вычисляется по количеству инициализирующих значений. Для полей объектов и локальных переменных можно опускать операцию new, она будет выполнена по умолчанию (оператор 2). Если присутствует и размерность, и список инициализаторов, размерность должна быть константой (оператор 4).
ПРИМЕЧАНИЕ
Если количество инициализирующих значений не совпадает с размерностью, возникает ошибка компиляции.
В качестве примера рассмотрим программу, которая определяет сумму и количество отрицательных элементов, а также максимальный элемент массива, состоящего из 6 целочисленных элементов (листинг 6.1).
Листинг 6.1. Работа с одномерным массивом
using System;
namespace ConsoleApplication1
{
class Class1
{
static void Main()
{
const int n = 6;
int[] a = new int[n] { 3, 12, 5, -9, 8, -4 };
Console.WriteLine("Исходный массив:");
for (int i = 0; i < n; ++i)
Console.Write("\t" + a[i]);
Console.WriteLine();
long sum = 0; // сумма отрицательных элементов
int num = 0; // количество отрицательных элементов
for (int i = 0; i < n; ++i)
if (a[i] < 0)
{
um += a[i]; ++num;
}
Console.WriteLine("Сумма отрицательных = " + sum);
Console.WriteLine("Кол-во отрицательных = " + num);
int max = a[0]; // максимальный элемент
for (int i = 1; i < n; ++i)
if (a[i] > max)
max = a[i];
Console.WriteLine("Максимальный элемент = " + max);
}
}
}