Масиви. Частина 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]

 


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