
- •Windows-проект на языке с#
- •Константы
- •Организация консольного ввода-вывода в c#
- •Методы классов в c#
- •Модификаторы для параметров методов
- •Массивы в c#
- •Одномерные массивы
- •Многомерные массивы
- •Базовый класс System.Array
- •Работа со строками в c#
- •Управляющие последовательности и вывод служебных символов
Массивы в c#
Массивы в C# - это набор однотипных элементов, доступ к которым производится по их числовому индексу. Наряду с массивами элементов простого встроенного типа (имеющим псевдонимы системных типов) существуют массивы объектов, структур, интерфейсов. Массивы могут быть одномерными (простыми) и многомерными. Массивы объявляются путем помещения квадратных скобок ( операторов индекса) между типом массива и его именем. После объявления переменной массива при запросе под него памяти указывается количество элементов для хранения.
Следует помнить, что размер массива задается при его создании, но не при объявлении. Если мы создаем массив фиксированного размера, то использование ключевого слова new обязательно. Если при объявлении мы массив сразу инициализируем, то new необязательно - размерность массива определит компилятор. Индексация элементов массива начинается с нуля.
В C++ список инициализации может по количеству элементов не соответствовать заказанной размерности массива. В этом случае компилятор игнорирует лишние элемемнты списка или часть элементов оставляет неинициализированными. В C# заказанная размерность массива должна строго соответствовать количеству элементовв списке инициализации, иначе компилятор выдаст ошибку.
Одномерные массивы
using System;
namespace Test
{
class Test
{
//***************************************
private void DisplayString(string subTitle, string[] list)
{
Console.WriteLine(subTitle);
for(int i = 0; i < list.Length; i++)
{
Console.WriteLine("{0}) {1}", i, list[i]);
}
}
//***************************************
private void DisplayInt(string subTitle, int[] list)
{
Console.WriteLine(subTitle);
for(int i = 0; i < list.Length; i++)
{
Console.WriteLine("{0}) {1}", i, list[i]);
}
}
//***************************************
static void Main()
{
string title = "************************
********************\n"
+ "\tОдномерные массивы:\n"
+ "*****************************
***************\n";
Console.WriteLine(title);
// Создадим объект для применения методов
// DisplayString() и DisplayInt()
Test test = new Test();
// Создадим ссылочную переменную типа массива с адресом null
string[] str1;
// Запросим память у системы для 10 элементов и запомним адрес.
str1 = new string[10];
test.DisplayString( "Строковый массив без
инициализации элементов.\n"
+ "Строковые элементы по умолчанию\n"
+ "инициализируются пустыми строками."
, str1);
// Поэлементная инициализация с использованием индексов
// и той же ссылки с новым адресом.
// Адрес старого массива потерян в куче. Утерянную
// память системе вернет сборщик мусора Garbare Collector
str1 = new string[7];
str1[0] = "Колян";
str1[1] = "Вован";
str1[2] = "Иван";
str1[3] = "Болван";
str1[4] = "Чурбан";
test.DisplayString("\nПоэлементная
инициализация с использованием индекса.\n"
+ "Старая адресуемая память утеряна
безвозвратно:", str1);
// Создадим ссылочную переменную и сразу инциализируем ее адресом.
int[] int1 = new int[5];
test.DisplayInt("\n"
+ "Числовой массив фиксированного размера.\n"
+ "Элементы по умолчанию инициализируются нулями."
, int1);
// Создаем ссылку на массив. Инициализируем ее адресом, запросив
// память с фиксированным количеством элементов,
// и сразу инициализируем элементы массива.
// Размер списка инициализации должен строго соответствовать
// запрошенной размерности массива.
int[] int2 = new int[5] {11, 22, 33, 44, 55};
test.DisplayInt(
"\n"
+ "Запрошенный размер массива должен\n"
+ "строго соответствовать списку инициализации."
, int2);
// Создаем ссылку на массив. Инициализируем ее адресом, запросив
// память без указания количества элементов. Количество элементов
// определит компилятор при инициализации списком.
// Используем оператор new.
int[] int3 = new int[] {11, 22, 33, 44, 55, 66, 77};
test.DisplayInt(
"\n"
+ "Размер по списку инициализации, \nпамять
запрашивается по new"
+ ":"
, int3);
// Создаем ссылку на массив. Инициализируем ее адресом, запросив
// память без указания количества элементов. Количество элементов
// определит компилятор при инициализации списком.
// Оператор new не используем.
int[] int4 = {11, 22, 33, 44, 55, 66, 77, 88, 99};
test.DisplayInt(
"\n"
+ "Размер по списку инициализации, \nпамять
запрашивается без new"
+ ":"
, int4);
while(true);
}
}
}
Листинг 20.40 . Одномерные массивы
Результат выполнения примера
********************************************
Одномерные массивы:
********************************************
Строковый массив без инициализации элементов.
Строковые элементы по умолчанию
инициализируются пустыми строками.
0)
1)
2)
3)
4)
5)
6)
7)
8)
9)
Поэлементная инициализация с использованием индекса.
Старая адресуемая память утеряна безвозвратно:
0) Колян
1) Вован
2) Иван
3) Болван
4) Чурбан
5)
6)
Числовой массив фиксированного размера.
Элементы по умолчанию инициализируются нулями.
0) 0
1) 0
2) 0
3) 0
4) 0
Запрошенный размер массива должен
строго соответствовать списку инициализации.
0) 11
1) 22
2) 33
3) 44
4) 55
Размер по списку инициализации,
память запрашивается по new:
0) 11
1) 22
2) 33
3) 44
4) 55
5) 66
6) 77
Размер по списку инициализации,
память запрашивается без new:
0) 11
1) 22
2) 33
3) 44
4) 55
5) 66
6) 77
7) 88
8) 99