Программирование >>  Обработка исключительных ситуаций 

1 ... 39 40 41 [ 42 ] 43 44 45 ... 142


Глава 6

Массивы и строки

В этой главе рассматриваются элементы, без которых не обходится практически ни одна программа, - массивы и строки.

Массивы

1 До настоящего момента мы использовали в программах простые переменные. При

этом каждой области памяти, выделенной для хранения одной величины, соот-

5 ветствует свое имя. Если переменных много, программа, предназначенная для их

обработки, получается длинной и однообразной. Поэтому в любом процедурном языке есть понятие массива - ограниченной совокупности однотипных величин.

Элементы массива имеют одно и то же имя, а различаются порядковым номером (индексом). Это позволяет компактно записывать множество операций с помощью циклов.

Массив относится к ссылочным типам данных, то есть располагается в динамической области памяти, поэтому создание массива начинается с выделения памяти под его элементы. Элементами массива могут быть величины как значимых, так и ссылочных типов (в том числе массивы). Массив значимых типов хранит значения, массив ссылочных типов - ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и null - для ссылочных.

На рис. 6.1 представлен массив, состоящий из пяти элементов любого значимого типа, например int или double, а рис. 6.2 иллюстрирует организацию массива из элементов ссылочного типа.

Вот, например, как выглядят операторы создания массива из 10 целых чисел и массива из 100 строк:

int[] w = new int[10]; string[] z = new string[100];



Пять простых переменных

Массив а из пяти элементов значимого типа

а[0]

а[1]

а[2]

а[3]

а[4]

Рис. 6.1. Простые переменные и массив из элементов значимого типа Массив а из пяти элементов ссылочного типа

а[0]

а[1]

а[2]

а[3]

а[4]

Значение

[ Значение

Значение

Значение] Значение

Рис. 6.2. Массив из элементов ссылочного типа

В первом операторе описан массив w типа int[].Операция new выделяет память под 10 целых элементов, и они заполняются нулями.

Во втором операторе описан массив z типа string[].Операция new выделяет память под 100 ссылок на строки, и эти ссылки заполняются значением null. Память под сами строки, составляющие массив, не выделяется - это будет необходимо сделать перед заполнением массива.

Количество элементов в массиве (размерность) не является частью его типа, это количество задается при выделении памяти и не может быть изменено впоследствии. Размерность может задаваться не только константой, но и выражением. Результат вычисления этого выражения должен быть неотрицательным, а его тип должен иметь неявное преобразование к int, ui nt, long или /long.

Пример размерности массива, заданной выражением: short п = ... ;

string[] z = new string[n + 1];

Элементы массива нумеруются с нуля, поэтому максимальный номер элемента всегда на единицу меньше размерности (например, в описанном выше массиве w элементы имеют индексы от 0 до 9). Для обращения к элементу массива после имени массива указывается номер элемента в квадратных скобках, например:

44 ]

z[i]

С элементом массива можно делать все, что допустимо для переменных того же типа. При работе с массивом автоматически выполняется контроль выхода за его границы: если значение индекса выходит за границы массива, генерируется исключение IndexOutOfRangeException.



128 Г лава 6. Массивы и строки

Массивы одного типа можно присваивать друг другу1. При этом происходит присваивание ссылок, а не элементов, как и для любого другого объекта ссылочного типа, например:

int[] а = new int[10];

int[] b = а; b и а указывают на один и тот же массив

Все массивы в С# имеют общий базовый класс Array, определенный в пространстве имен System. В нем есть несколько полезных методов, упрощающих работу с массивами, например методы получения размерности, сортировки и поиска. Мы рассмотрим эти методы немного позже в разделе Класс System.Array (см. с. 133).

ПРИМЕЧАНИ Е-

Массивы, являющиеся полями класса, могут иметь те же спецификаторы, что и поля, представляющие собой простые переменные.

В С# существуют три разновидности массивов: одномерные, прямоугольные и ступенчатые (невыровненные).

Одномерные массивы

Одномерные массивы используются в программах чаще всего. Варианты описания массива:

тип[] имя:

тип[] имя = new тип [ размерность ];

тип[] имя = { списокинициализаторов };

тил[] имя = new тип [] { списокинициализаторов };

тип[] имя = new тип [ размерность ] { списокинициализаторов };

ВНИМАНИЕ

При описании массивов квадратные скобки являются элементом синтаксиса, а не указанием на необязательность конструкции.

Примеры описаний (один пример для каждого варианта описания):

int[] а 1 элементов нет

int[] b new int[4]; 2 элементы равны О

int[] с = { 61. 2, 5,-9 }: II 3 new подразумевается

int[] d = new int[] { 61. 2, 5. -9 4 размерность вычисляется

int[] e = new int[4] { 61. 2, 5. -9 5 избыточное описание

Здесь описано пять массивов. Отличие первого оператора от остальных состоит в том, что в нем, фактически, описана только ссылка на массив, а память под элементы массива не выделена. Если список инициализации не задан, размерность может быть не только константой, но и выражением типа, приводимого к целому.

1 В более общем виде: можно преобразовать массив, состоящий из элементов некоторого класса а, в массив, состоящий из элементов типа, являющегося базовым для а.



1 ... 39 40 41 [ 42 ] 43 44 45 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика