Копіювання Масивів і Пам'ять
Свайпніть щоб показати меню
Під час роботи з масивами в C# важливо розуміти, як вони зберігаються в пам'яті та що відбувається під час копіювання або присвоєння масивів. Масиви в C# є типами посилань, тобто змінні зберігають посилання (або вказівник) на місце розташування даних масиву в пам'яті, а не самі дані. Це має суттєві наслідки при присвоєнні однієї змінної масиву іншій або коли потрібно створити справжню копію вмісту масиву. Якщо не враховувати ці деталі, можна випадково змінити дані там, де цього не планувалося, що призведе до важковловимих помилок.
Program.cs
12345678910111213141516171819202122232425262728293031namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] original = { 1, 2, 3, 4, 5 }; // Assigning the array reference int[] assigned = original; // Copying the array elements int[] copied = new int[original.Length]; for (int i = 0; i < original.Length; i++) { copied[i] = original[i]; } // Modify the assigned array assigned[0] = 99; // Modify the copied array copied[1] = 77; System.Console.WriteLine("original: " + string.Join(", ", original)); System.Console.WriteLine("assigned: " + string.Join(", ", assigned)); System.Console.WriteLine("copied: " + string.Join(", ", copied)); } } }
Коли ви присвоюєте одну змінну масиву іншій, обидві змінні вказують на одну й ту ж область пам'яті. Це означає, що зміни, внесені через одну змінну, відображаються і в іншій, оскільки це лише два посилання на один і той самий масив. Щоб уникнути цього, потрібно копіювати кожен елемент у новий масив, як показано у наведеному вище коді. Це створює новий масив у пам'яті, тому зміни в одному масиві не впливають на інший.
Це підводить до понять поверхневе копіювання та глибоке копіювання. Поверхневе копіювання копіює лише посилання на масив, а не самі елементи. Глибоке копіювання створює новий масив і копіює в нього кожен елемент, у результаті чого утворюються два незалежних масиви.
Program.cs
1234567891011121314151617namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 10, 20, 30 }; int[] shallow = numbers; shallow[1] = 99; System.Console.WriteLine("numbers: " + string.Join(", ", numbers)); System.Console.WriteLine("shallow: " + string.Join(", ", shallow)); } } }
Цей приклад коду демонструє, що відбувається під час поверхневого копіювання масиву в C#. Коли ви присвоюєте одну змінну масиву іншій, наприклад, int[] shallow = numbers, ви не створюєте новий масив і не копіюєте елементи. Замість цього обидві змінні, numbers і shallow, вказують на один і той самий масив у пам'яті. Це означає, що будь-які зміни, внесені через одну змінну, будуть видимі через іншу.
Поверхневе копіювання копіює посилання на масив, тому обидві змінні вказують на одну й ту саму область пам'яті. Глибоке копіювання створює новий масив і копіює всі елементи, тому масиви є незалежними.
1. Що відбувається, коли ви присвоюєте одну змінну масиву іншій у C#?
2. Як можна створити справжню копію масиву?
3. Чому важливо розуміти пам'ять масиву під час роботи з даними?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат