1.2. Одномірні масиви
Одномірні масиви використовуються в програмах найчастіше. Варіанти опису масиву:
тип[] ім'я:
тип[] ім'я = new тип [ розмірність ];
тип[] ім'я = { список ініціалізаторів };
тип[] ім'я = new тип [] { список ініціалізаторів };
тип[] ім'я = new тип [ розмірність ] { список ініціалізаторів };
При описі масивів квадратні дужки є елементом синтаксису, а не вказівкою на необов'язковість конструкції.
Приклади описів (один приклад для кожного варіанта опису):
int [ ] а // 1 елементів немає
int [ ] b = new int [4]; // 2 елементи рівні 0
int [ ] с = { 61, 2, 5, -9 } ; // 3 new мається на увазі
int [ ] d = new int [ ] { 61, 2, 5, -9 } ; // 4 розмірність обчислюється
int [ ] e = new int [4] { 61, 2, 5, -9 } ; // 5 надлишковий опис
Тут описано п'ять масивів. Відмінність першого оператора від інших полягає в тому, що в ньому, фактично, описане тільки посилання на масив, а пам'ять під елементи масиву не виділена. Якщо список ініціалізації не заданий, розмірність може бути не тільки константою, але й вираженням типу, що приводить до цілого.
У кожному з інших масивів по чотирих елементи цілого типу. Як видно з операторів 3-5, масив при описі можна ініціалізувати. Якщо при цьому не задана розмірність (оператор 4), кількість елементів обчислюється по кількості ініціалізованих значень. Для полів об'єктів і локальних змінних можна опускати операцію new, вона буде виконана за замовчуванням (оператор 3). Якщо є присутнім і розмірність, і список инициализаторов, розмірність повинна бути константою (оператор 5) .
Якщо кількість ініціалізованих значень не збігається з розмірністю, виникає помилка компіляції.
Як приклад розглянемо програму, що визначає суму й кількість відємних елементів, а також максимальний елемент масиву, що складає з 6 цілочисельних елементів (приклад 1).
Приклад 1. Робота з одномірним масивом
using System;
namespace ConsoleApplication1
{
class Classl
{
static void Main()
{
const int n = 6; // буде помилка, оскільки n = 4
int[] a = new int[n] { 3, 12, 5, -9 };
Console.WriteLine("Вихідний масив:");
for (int i = 0; i < n; ++i)
Console.Write("\t" + a[i]);
Console.WriteLine();
long sum = 0; // сума відємних елементів
int num = 0; // кількість відємних елементів
for (int i = 0; i < n; ++i)
if (a[i] < 0)
{
sum += a[i];
++num;
}
Console.WriteLine("Сума відємних = " + sum);
Console.WriteLine("Кількість відємних = " + num);
int max = a[0]; // максимальний елемент
for (int i = 1; i < n; ++i)
if (a[i] > max) max = a[i];
Console.WriteLine("Максимальний елемент = " + max);
Console.ReadLine();
}
}
}
1.3. Прямокутні масиви
Прямокутний масив має більше одного виміру. Найчастіше в програмах використаються двовимірні масиви. Варіанти опису двовимірного масиву:
тип [ , ] ім'я;
тип [ , ] ім'я = new тип [ розм_1, розм_2 ];
тип [ , ] ім'я = { список ініціалізаторів };
тип [ , ] ім'я = new тип [ , ] { список ініціалізаторів };
тип [ , ] ім'я = new тип [ розм_1, розм_2 ] { список ініціалізаторів };
Приклади описів (один приклад для кожного варіанта опису):
int [ , ] a ; // 1 елементів немає
int [ , ] b = new int [2,3] ; // 2 елементи рівні 0
int [ , ] с = { {1,2,3} , {4, 5,6} } ; // 3 new мається на увазі
int [ , ] d = new int [ , ] {{1,2,3} , {4,5,6}} ; // 4 розмірність обчислюється
int [ , ] е = new int [2,3] {{1,2,3} , {4,5,6}} ; // 5 надлишковий опис
Якщо список ініціалізації не заданий, розмірності можуть бути не тільки константами, але й вираженнями типу, що приводить до цілого. До елемента двовимірного масиву звертаються, указуючи номера рядка й стовпця, на перетинанні яких він розташований, наприклад:
а [1 , 4], b[i , j], b[j , i]
Необхідно пам'ятати, що компілятор сприймає як номер рядка перший індекс, як би він не був позначений у програмі.