Г. Шилдт - С#4.0 Полное руководство (1160795), страница 34
Текст из файла (страница 34)
А размер определяет число элементов массива. ПРИМЕЧАНИЕ Если у вас имеется некоторый опыт программирования на С или С++, обратите особое внимание иа то, как объявляются массивы в С№. В частности, квадратные скобки следуют после названия типа, а не имени массива. Обратимся к конкретному примеру.
В приведенной ниже строке кода создается массив типа 1пс, который составляется из десяти элементов и связывается с переменной ссылки на массив, именуемой завр1е. ьпг[) вавр1е = пем гоп[10) В переменной завр1е хранится ссылка на область памяти, выделяемой для массива оператором пеи.
Эта область памяти должна быть достаточно большой, чтобы в ней могли храниться десять элементов массива типа Тпш Как и при создании экземпляра класса, приведенное выше объявление массива можно разделить на два отдельных оператора. Например: ьпс[) вввр1е; вавр1е = пем гоп[10); В данном случае переменная завр1е не ссылается на какой-то определенный физический объект, когда она создается в первом операторе. И лишь после выполнения второго оператора эта переменная ссылается на массив. Досгуп к отдельному элементу массива осуществляется по индексу: Индекс обозначает положение элемента в массиве.
В языке СФ индекс первого элемента всех массивов оказывается нулевым. В частности, массив завр1е состоит из 10 элементов с индексами от О до 9. Для индексирования массива достаточно указать номер требуемого эле- Глава 7. Массивы и строки 179 мента в квадратных скобках. Так, первый элемент массива яагпр1е обозначается как яавр1е [0), а последний его элемент — как яаир1е [ 9) . Ниже приведен пример про- граммы, в которой заполняются все ) 0 элементов массива яагпр1е. // Продемонстрировать одномерный массив. нввпч Яувсевы с1авя явгауоеио ( вгаг1с чогв ма1п() гпп(] вамр1е = пен гпг[10]т ьпс Гол(1 = Ог 1 < 10( 1 = в+1) вап1р1е[1] Гол(1 = 0; 1 < 10; 1 = 1+1) Сопво1е.иг1гевгпе("ваир1е[" + ] ь "]: " + ваир1е[].))т При выполнении этой программы получается следующий результат. „ р1е[0]: О вамр1е(1): 1 яамр1е[2]: 2 яамр1е[3]: 3 яамр1е[4): 4 яамр1е[5]: 5 яаер1е[6]: б яамр1е[7): 7 яамр1е[8]: 8 ваир1е[9): 9 Схематически массив яатр1е можно представить таким образом.
0 1 2 3 4 5 б 7 8 9 о, е о. Е й о. Е й с Е Е Р. Е Е // Вычислить среднее арифметическое ряда значений. пяьпч Яуягевн с1аяв Ачегаче ( ягас1с чо1С Маге() Массивы часто применяются в программировании потому, что они дают возможносп легко обращаться с большим числом взаимосвязанных переменных. Например, в приведенной ниже программе выявляется среднее арифметическое ряда значений, хранящихся в массиве пнптя, который циклически опрашивается с помощью оператора цикла Гог.
180 Часть!. Язык С№ 1пг[] ппвя = пен тля[10] ьпт ачч = Ор — 99; 10; 100р — 18; сот(1пп 1=0~ т < 10' ь+~) ачч = ач9 ач9 = ач9 / 10; Сопяо1е.нгьгеьвпе("Среднее: " + ачч); Результат выполнения этой программы выглядит следующим образом. Среднее: 53 Инициализация массива В приведенной выше программе первоначальные значения были заданы для элементов массива ппвя вручную в десяти отдельных операторах присваивания. Конечно, такая инициализация массива совершенно правильна, но то же самое можно сделать намного проще. Ведь массивы могут инициализироваться, когда они создаются.
Ниже приведена общая форма инициализации одномерного массива: тип[] имя массива = (ка11, та12, та13, ..., Оа1Н)1 где Оа11-та 1]4 обозначают первоначальные значения, которые присваиваются по очереди, слева направо и по порядку индексирования. Для хранения инициализаторов массива в С[] автоматически распределяется достаточный объем памяти. А необходимость пользоваться оператором пеи явным образом отпадает сама собой. В качестве примера ниже приведен улучшенный вариант программы, вычисляющей среднее арифметическое. // вычислить среднее арифметическое ряда значений.
Ояьпч зуяяевг с1аяя Лчетаче ( ятат1с лота Мазп() ( ьпт[] ппвя = ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 ); 1пт ачч = 0; сот(ьпя 1=0; 1 < 104 1++) ппвя [0] ловя[1) пчвя[2) пшля [3) ппвя [4] ппвя[5] ловя[6) ПОвя[7] пшля [8] пшл5 [9] — 78; — 23: — 63; 9; 87; 49; ]лава 7. Массивы и строки 181 ачс = ачч + пцвя[1] ачч = вчч ! 10; сопяо1в.иг1свь1пв("среднее: " + ачч) Любопытно, что при инициализации массива можно также воспользоваться оператором пеы, хотя особой надобности в этом нет, Например, приведенный ниже фрагмент кода считается верным, но избыточным для инициализации массива пцвя в упомянутой выше программе.
1пг(] повн = пем ьпя(] ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 ): Несмотря на свою избыточность, форма инициализации массива с оператором пеы оказывается полезной в том случае, если новый массив присваивается уже существующегкпеременной ссылки на массив. Например: 1пп (] повн| повя = пен ьпс (] ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 ); В данном случае переменная пцвя объявляется в первом операторе и инициализируется во втором. И последнее замечание: при инициализации массива его размер можно указывать явным образом, но этот размер должен совпадать с числом инициализаторов.
В качестве примера ниже приведен еще один способ инициализации массива пцвя. ьпв[) повя = пен 1пг(10] ( 99, 10, 100, 18, 78, 23, 63, 9, 87, 49 )г В этом объявлении размер массива пцвя задается равным 10 явно. Соблюдение границ массива Границы массива в С(( строго соблюдаются. Если границы массива не достигаются или же превышаются, то возникает ошибка при выполнении. Для того чтобы убедиться в этом, попробуйте выполнить приведенную ниже программу, в которой намеренно превышаются границы массива.
Продемонстрировать превышение границ массива. ояьпч Буяоев; о1аяв Аггаукгг ( ясвгьс чоьс Мвьп() ( пг(] яавр1в = пен ьпо[10]; ьпс ю Воссоздать превышение границ массива. Гог(1 = 0; 1 < 100; 1 = г+1) явв1р1е[(.) ) 182 Часть ]. язык С(( Как только значение 'переменной 1 достигнет 10, возникнет исключительная ситуация типа 1пг(ехооСОЕНапдеЕхсерг1ою связанная с выходом за пределы индексирования массива, и программа преясдевременно завершится.
(Подробнее об исключительных ситуациях и их обработке речь пойдет в главе 13.) Многомерные массивы В программировании чаще всего применяются одномерные массивы, хотя и многомерные не так уж и редки. Многомерным называется такой массив, который отличается двумя или более измерениями, причем доступ к каждому элементу такого массива осуществляется с помощью определенной комбинации двух или более индексов. Двумерные массивы Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно представить в виде таблицы, на строки которой указывает один индекс, а на столбцы — другой.
В следующей строке кода объявляется двумерный массив 1пгеоег размерами 10н20. ьдг(,] ГвЬ1е = иеи 1дс(10, 20] Обратите особое внимание на объявление этого массива. Как видите, оба его размера разделяются запятой. В первой части этого объявления синтаксическое обозначение означает, что создается переменная ссылки на двумерный массив. Если же память распределяется для массива с помощью оператора пеы, то используется следующее синтаксическое обозначение. 1пв [10, 20] В данном объявлении создается массив размерами 10н20, но и в этом случае его размеры разделяются запятой.
Для доступа к элементу двумерного массива следует указать оба индекса, разделив их запятой. Например, в следующей строке кода элементу массива СаЬ1е с координатами местоположения [3,5) присваивается значение 10. СаЬ1е(З, 5] = 10; Ниже приведен более наглядный пример в виде небольшой программы, в которой двумерный массив сначала заполняется числами от 1 до 12, а затем выводится его содержимое. г! Продемонстрировать двумерный массив.
ов1оч зувсеьи с1авв тноо ( ввас1с то1г( Мв1П(] ( ьпс с, Глава т. Массивы и строки 183 1пв[,) ваЬ|е = пем ьпв[З, 4)г (в=ог с < Зг + Ю Гог().=0; 1 < 4г .н-1) ( ваьге[г 1) = (и 4) вгв1) Сопво1е. Иг1се (ВаЬ1е [С, 1) ) Сопво1е.нт1сеьвпе () ) ) ) В данном примере элемент массива саЬ1е [О, О] будет иметь значение 1, элемент массива СаЬ1е [О, 1] — значение 2, элемент массива СаЬ1е [О, 2] — значение 3 и т.д. А значение элемента массива СаЬ1е [2, 3] окажется равным 12.
На рис. 7.1 показано схематически расположение элементов этого массива и их значений. 0 1 2 3< — правый индекс левый н 1аые[1[[2[ Рис. 7.1. Схематическое представление массива СаЬ1е, созданного в программе тиоп СОВЕТ Если аам приходилось раньше программировать иа С, С++ или Зава, го будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С№. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как а С№ они разделяются запятой. Массивы трех и более измерений В С№ допускаются массивы трех и более измерений.
Ниже приведена общая форма обълвления многомерного массива. тип[,...,) имя массива = пем тип[размер1, размер2, ... размери)Г Например, в приведенном ниже объявлении создается трехмерный целочисленный массив размерами 4в10в3. тпв[,,) еп1в1г(1и = пем ьпв[4, 10, 3) А в следующем операторе элементу массива ип101<(1т с координатами местоположения (2,4,1) присваивается значение 100. пв1В1с)ив[2, 4, 1] = 100; 184 Часть ].