Масиви. Частина 3. Посилання на масиви. Властивість Length. Присвоювання масивів

Масиви. Частина 3. Посилання на масиви. Властивість Length. Присвоювання масивів


Зміст



1. Яким чином реалізується присвоювання посилань на масив? Як компілятор C# реалізує присвоювання змінних типу “масив”? Приклад

Для будь-якого новостворюваного масиву пам’ять виділяється з допомогою оператора new. Це означає, що масиви є посилального типу (а не типу-значення). Тобто, змінні типу “масив” є посиланнями на ці масиви.

Після присвоювання значення однієї змінної (посилання на масив) іншій змінній, обидві змінні будуть вказувати (посилатись) на один і той самий масив. Тобто, копія масиву не створюється.

Щоб змінні вказували на різні ділянки пам’яті (різні масиви даних) – для кожної з них потрібно виділяти пам’ять оператором new. Якщо потрібно виконати копіювання даних одного масиву в інший, то це потрібно виконати програмним шляхом, наприклад з допомогою операторів циклу.

 

2. Приклад присвоювання змінних посилань на масив

Приклад. У прикладі оголошується масив з 20 дійсних чисел та демонструється операція присвоювання посилань на цей масив.

// копіювання посилань на масиви
double[] M1 = new double[20]; // оголошення масиву M1 з 20 дійсних чисел
double[] M2; // для масиву M2 пам'ять не виділена

// заповнення масиву M1 довільними значеннями
for (int i = 0; i < 20; i++)
    M1[i] = 0.1 * i;

M2 = M1; // тепер M2 і M1 посилаються на одну й ту ж ділянку пам'яті

double d;
d = M2[3]; // d = 0.3

 

3. Як визначити кількість елементів у масиві? Властивість Length

Довжина (кількість елементів) масиву може зберігатись в програмі в спеціальних, додаткових змінних. Оскільки, в мові C# масив є об’єктом, то його довжина зберігається у властивості Length.

// демонстрація використання властивості Length
char[] C = new char[20];
float[] F = new float[100];
int[] I = new int[500];
int d;

d = C.Length; // d = 20
d = F.Length; // d = 100
d = I.Length; // d = 500

 

4. Які особливості застосування властивості Length для багатовимірних масивів?

У випадку багатовимірних масивів, властивість Length повертає кількість елементів усього масиву.

// властивість Length для багатовимірних масивів
uint[,] UI = new uint[200,10]; // двовимірний масив
bool[][] B = new bool[3][]; // ступінчатий масив
float[, ,] F = new float[3, 4, 5]; // тривимірний масив

B[0] = new bool[10];
B[1] = new bool[15];
B[2] = new bool[20];

int d;
d = UI.Length; // d = 200*10 = 2000
d = B[0].Length; // d = 10
d = B[1].Length; // d = 15
d = B.Length; // d = 3
d = F.Length; // d = 3*4*5 = 60

 

5. Приклад обчислення суми елементів масиву з використанням властивості Length
// сума елементів одновимірного масиву
int[] A = new int[10]; // оголошення масиву

// заповнення масиву довільними значеннями
for (int i = 0; i < A.Length; i++)
    A[i] = i;

// обчислення суми елементів масиву
int s = 0;
for (int i = 0; i < A.Length; i++)
    s = s + A[i];

// s = 45

 

6. Яким чином можна застосувати властивість Length для ступінчатих масивів?

Для ступінчатих масивів властивість Length можна застосовувати як для цілого масиву в цілому, так і для кожного масиву, що є рядком.

У першому випадку (для цілого масиву в цілому) властивість Length повертає кількість рядків у масиві. У випадку кожного рядка, властивість Length повертає довжину кожного рядка.

// властивість Length для ступінчатих масивів
int[][] A = new int[5][];

A[0] = new int[10];
A[1] = new int[20];
A[3] = new int[25];

int d, d1, d2, d3;

d = A.Length; // d = 5;
d1 = A[0].Length; // d = 10
d2 = A[1].Length; // d = 20
//d3 = A[4].Length; - помилка, не має посилання на A[4]

 


Зв’язані теми