Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Объявление одномерных массивов
Напомню общую структуру объявления: [< атрибуты> ] [< модификаторы> ] < тип> < объявители>;Забудем пока об атрибутах и модификаторах. Объявление одномерного массива выглядит следующим образом: < тип> [] < объявители>;Заметьте, в отличие от языка C++ квадратные скобки приписаны не к имени переменной, а к типу. Они являются неотъемлемой частью определения класса, так что запись T[] следует понимать как класс одномерный массив с элементами типа T. Что же касается границ изменения индексов, то эта характеристика к классу не относится, она является характеристикой переменных - экземпляров, каждый из которых является одномерным массивом со своим числом элементов, задаваемых в объявителе переменной. Как и в случае объявления простых переменных, каждый объявитель может быть именем или именем с инициализацией. В первом случае речь идет об отложенной инициализации. Нужно понимать, что при объявлении с отложенной инициализацией сам массив не формируется, а создается только ссылка на массив, имеющая неопределенное значение Null. Поэтому пока массив не будет реально создан и его элементы инициализированы, использовать его в вычислениях нельзя. Вот пример объявления трех массивов с отложенной инициализацией: int[] a, b, c;Чаще всего при объявлении массива используется имя с инициализацией. И опять-таки, как и в случае простых переменных, могут быть два варианта инициализации. В первом случае инициализация является явной и задается константным массивом. Вот пример: double[] x= {5.5, 6.6, 7.7};Следуя синтаксу, элементы константного массива следует заключать в фигурные скобки. Во втором случае создание и инициализация массива выполняется в объектном стиле с вызовом конструктора массива. И это наиболее распространенная практика объявления массивов. Приведу пример: int[] d= new int[5];Итак, если массив объявляется без инициализации, то создается только висячая ссылка со значением void. Если инициализация выполняется конструктором, то в динамической памяти создается сам массив, элементы которого инициализируются константами соответствующего типа (ноль для арифметики, пустая строка для строковых массивов), и ссылка связывается с этим массивом. Если массив инициализируется константным массивом, то в памяти создается константный массив, с которым и связывается ссылка. Как обычно задаются элементы массива, если они не заданы при инициализации? Они либо вычисляются, либо вводятся пользователем. Давайте рассмотрим первый пример работы с массивами из проекта с именем Arrays, поддерживающего эту лекцию: public void TestDeclaration(){ //объявляются три одномерных массива A, B, C int[] A = new int[5], B= new int[5], C= new int[5]; Arrs.CreateOneDimAr(A); Arrs.CreateOneDimAr(B); for(int i = 0; i< 5; i++) C[i] = A[i] + B[i]; //объявление массива с явной инициализацией int[] x ={5, 5, 6, 6, 7, 7}; //объявление массивов с отложенной инициализацией int[] u, v; u = new int[3]; for(int i=0; i< 3; i++) u[i] =i+1; //v= {1, 2, 3}; //присваивание константного массива //недопустимо v = new int[4]; v=u; //допустимое присваивание Arrs.PrintAr1(" A", A); Arrs.PrintAr1(" B", B); Arrs.PrintAr1(" C", C); Arrs.PrintAr1(" X", x); Arrs.PrintAr1(" U", u); Arrs.PrintAr1(" V", v); }На что следует обратить внимание, анализируя этот текст:
Здесь rnd - это статическое поле класса Arrs, объявленное следующим образом: Процедура печати массива с именем name выглядит так: public static void PrintAr1(string name, int[] A){ Console.WriteLine(name); for(int i = 0; i< A.GetLength(0); i++) Console.Write(" \t" + name + " [{0}]={1}", i, A[i]); Console.WriteLine(); }//PrintAr1На рис. 11.1 показан консольный вывод результатов работы процедуры TestDeclarations. Особое внимание обратите на вывод, связанный с массивами u и v.
|