Массивы в языке С#: определение, виды.
Массивы в С #
Система типов в С # построена на основе классов. Типы делятся на 4 группы: значений, ссылок, указателей и void.
Типы значений были рассмотрены ранее. К типам ссылок относятся классы (библиотечные и определяемые пользователем), массивы и строки.
Массив – это упорядоченная совокупность однотипных данных. Доступ к элементам массива осуществляется по индексу. Объявление массива похоже на объявление переменной тем исключением, что после указания типа ставятся квадратные скобки:
тип[ ] имя_ссылки_на_массив;
Например:
int[ ] numbers;
После определения переменной массива компилятор выделит память под ссылки в стеке. Каждый конкретный массив создается как объект класса, производный от класса Array ( системный класс System.Array).
Для создания экземпляра (объекта) конкретного типа массива используется операция new .
new тип [ размер массива ]
Это выражение определяет объект-массив с указанным количеством элементов. Этот объект компилятор размещает в области памяти, называемой кучей ( heap). Результатом выполнения операции new является ссылка на участок памяти, выделенной для объекта.
Чтобы связать ссылку с объектом используют оператор присваивания.
имя_ссылки_на_массив = new тип [ размер массива ] ;
Тип ссылки на массив должен соответствовать типу, указанному после new .
Допускается объединение объявления типа ссылки на массив с определением массива-объекта.
Тип имя_ссылки_на_массив = new тип [ размер массива ] ;
int[ ] nums = new int[4];
Здесь объявили массив nums, который будет хранить
данные типа int. Далее используя операцию new, выделили память для 4 элементов массива: new int[4]. Число 4 еще называется длиной ( размером) массива.
После объявления массива его элементы получают значения по умолчанию: для арифметических данных – 0, для типа char – ‘/0’, для логических false, для типа string – пустые строки.
Также можно сразу указать значения для этих элементов (явная инициализация). Значения элементов указываются в фигурных скобках и разделяются запятой:
int[] nums2 = new int[4] { 1, 2, 3, 5 };
int[] nums3 = new int[] { 1, 2, 3, 5 };
int[] nums4 = new[] { 1, 2, 3, 5 };
int[] nums5 = { 1, 2, 3, 5 };
Все перечисленные выше способы будут равноценны.
Для обращения к элементам массива используются индексы .
Индекс – это номер элемента в массиве, при этом нумерация начинается с нуля, поэтому индекс первого элемента будет равен 0.
В одном объявлении можно определить несколько однотипных ссылок на массивы с элементами одного типа.
byte[ ] x,y,z
Инициализация допустима и при таком определении
нескольких однотипных ссылок в одном объявлении.
int b[ ]={1,2,3,4,5},
z=new int[ ]{6,7,8,9},
d=z ;
При объявлении ссылки на массив компилятор
выделяет память только для ссылки, а память в куче
для объекта-массива выделяется при явном или
неявном применении операции new . В примере доступ к
массиву возможен двумя ссылками d и z . Ссылка на
массив не является уникальным именем экземпляра
массива, так как с ним может быть связано несколько
ссылок.
Чтобы обратиться к четвертому элементу в массиве, нам надо использовать индекс 3, к примеру: nums[3]. Используем индексы для получения и установки значений элементов массива:
int[] nums = new int[4];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 5;
Console.WriteLine(nums[3]); // 5
Так как массив определен из 4 элементов, то мы не можем обратиться, например, к шестому элементу: nums[5] = 5;. Если мы так попытаемся сделать, то мы получим исключение IndexOutOfRangeException .
Перебор массивов. Цикл foreach
Цикл foreach предназначен для перебора элементов в контейнерах, в том числе в массивах. Формальное объявление цикла foreach :
foreach (тип имя_переменной in ссылка_на_массив)
{
… // действия
}
Например:
int[ ] numbers = new int[ ] { 1, 2, 3, 4, 5 };
foreach (int i in numbers)
{
Console.WriteLine(i);
}
Здесь в качестве контейнера выступает массив данных типа int. Поэтому мы объявляем переменную с типом int
Подобные действия мы можем сделать и с помощью цикл for :
int[ ] numbers = new int[ ] { 1, 2, 3, 4, 5 };
for (int i = 0; i
{
Console.WriteLine(numbers[i]);
}
В то же время цикл for более гибкий по сравнению с foreach. Если foreach последовательно извлекает элементы контейнера и только для чтения, то в цикле for мы можем перескакивать на несколько элементов вперед в зависимости от приращения счетчика, а также можем изменять элементы:
int[ ] numbers = new int[ ] { 1, 2, 3, 4, 5 };
for (int i = 0; i
{
numbers[i] = numbers[i] * 2;
Console.WriteLine(numbers[i]);
}
numbers.Length – это метод определяет длину массива.
10) break; " width="640"
using System;
namespace app15_array
{
class Program
{
public static void Main(string[] args)
{
string [ ]A = new string [10];
string s;
int i=0;
Console.WriteLine("Введите строки массива, после " +
"каждой , в конце ");
while(true)
{
s=Console.ReadLine();
A[i]=s;
if(s==null || i 10)
break;
i++;
}
Console.WriteLine("Введено строк — {0}",i);
Console.Read();
}
}
}