Шрифт:
Любопытно, что при инициализации массива можно также воспользоваться опе ратором new, хотя особой надобности в этом нет. Например, приведенный ниже фраг мент кода считается верным, но избыточным для инициализации массива nums в упо мянутой выше программе. int[] nums = new int[] { 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 };
Несмотря на свою избыточность, форма инициализации массива с оператором new оказывается полезной в том случае, если новый массив присваивается уже существую щей переменной ссылки на массив. Например: int[] nums; nums = new int[] { 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 };
В данном случае переменная nums объявляется в первом операторе и инициализи руется во втором.
И последнее замечание: при инициализации массива его размер можно указывать явным образом, но этот размер должен совпадать с числом инициализаторов. В каче стве примера ниже приведен еще один способ инициализации массива nums. int[] nums = new int[10] { 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 );
В этом объявлении размер массива nums задается равным 10 явно. Соблюдение границ массива
Границы массива в C# строго соблюдаются. Если границы массива не достигаются или же превышаются, то возникает ошибка при выполнении. Для того чтобы убедить ся в этом, попробуйте выполнить приведенную ниже программу, в которой намерен но превышаются границы массива. // Продемонстрировать превышение границ массива. using System; class ArrayErr { static void Main { int[] sample = new int[10]; int i; // Воссоздать превышение границ массива. for(i = 0; i < 100; i = i+1) sample[i] = i; } }
Как только значение переменной i достигает 10, возникнет исключительная ситуа ция типа IndexOutOfRangeException, связанная с выходом за пределы индексирова ния массива, и программа преждевременно завершится. (Подробнее об исключитель ных ситуациях и их обработке речь пойдет в главе 13.) Многомерные массивы
В программировании чаще всего применяются одномерные массивы, хотя и много мерные не так уж и редки. Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов. Двумерные массивы
Простейшей формой многомерного массива является двумерный массив. Местопо ложение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает один индекс, а на столбцы — другой.
В следующей строке кода объявляется двумерный массив integer размерами 10x20. int[,] table = new int[10, 20];
Обратите особое внимание на объявление этого массива. Как видите, оба его разме ра разделяются запятой. В первой части этого объявления синтаксическое обозначение [,]
означает, что создается переменная ссылки на двумерный массив. Если же память рас пределяется для массива с помощью оператора new, то используется следующее син таксическое обозначение. int[10, 20]
В данном объявлении создается массив размерами 10x20, но и в этом случае его раз меры разделяются запятой.
Для доступа к элементу двумерного массива следует указать оба индекса, разделив их запятой. Например, в следующей строке кода элементу массива table с координа тами местоположения (3,5) присваивается значение 10. table[3, 5] = 10;
Ниже приведен более наглядный пример в виде небольшой программы, в которой двумерный массив сначала заполняется числами от 1 до 12, а затем выводится его со держимое. // Продемонстрировать двумерный массив. using System; class TwoD { static void Main { int t, i; int[,] table = new int[3, 4]; for(t=0; t < 3; ++t) { for(i=0; i < 4; ++i) { table[t,i] = (t*4)+i+1; Console.Write(table[t,i] + " "); } Console.WriteLine; } } }
В данном примере элемент массива table[0,0] будет иметь значение 1, элемент массива table[0,1] — значение 2, элемент массива table[0,2] — значение 3 и т.д. А значение элемента массива table[2,3] окажется равным 12. На рис. 7.1 показано схематически расположение элементов этого массива и их значений.
Рис. 7.1. Схематическое представление массива table, созданного в программе TwoD
СОВЕТ Если вам приходилось раньше программировать на С, C++ или Java, то будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С#. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как в C# они разделяются запятой. Массивы трех и более измерений
В C# допускаются массивы трех и более измерений. Ниже приведена общая форма объявления многомерного массива. тип[,...,] имя_массива = new тип[размер1, размер2, ... размерN];
Например, в приведенном ниже объявлении создается трехмерный целочислен ный массив размерами 4x10x3. int[,,] multidim = new int[4, 10, 3];
А в следующем операторе элементу массива multidim с координатами местополо жения (2,4,1) присваивается значение 100. multidim[2, 4, 1] = 100;
Ниже приведен пример программы, в которой сначала организуется трехмерный массив, содержащий матрицу значений 3x3x3, а затем значения элементов этого мас сива суммируются по одной из диагоналей матрицы. // Суммировать значения по одной из диагоналей матрицы 3x3x3. using System; class ThreeDMatrix { static void Main { int[,,] m = new int[3, 3, 3]; int sum = 0; int n = 1; for(int x=0; x < 3; x++) for(int y=0; у < 3; y++) for(int z=0; z < 3; z++) m[x, y, z] = n++; sum = m[0, 0, 0] + m[1, 1, 1] + m[2, 2, 2]; Console.WriteLine("Сумма значений по первой диагонали: " + sum); } }