Copie de tableau et mémoire
Glissez pour afficher le menu
Lorsque vous travaillez avec des tableaux en C#, il est important de comprendre comment ils sont stockés en mémoire et ce qui se passe lorsque vous les copiez ou les assignez. Les tableaux en C# sont des types référence, ce qui signifie que les variables contiennent une référence (ou un pointeur) vers l'emplacement où les données du tableau sont stockées en mémoire, et non les données elles-mêmes. Cela a des implications importantes lorsque vous assignez une variable de tableau à une autre ou lorsque vous souhaitez effectuer une véritable copie du contenu d'un tableau. Si vous négligez ces détails, vous risquez de modifier accidentellement des données à des endroits inattendus, ce qui peut entraîner des bugs difficiles à détecter.
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)); } } }
Lorsque vous assignez une variable de tableau à une autre, les deux variables pointent vers le même emplacement mémoire. Cela signifie qu'une modification effectuée via l'une des variables apparaît dans l'autre, car il s'agit simplement de deux références vers le même tableau. Pour éviter cela, il faut copier chaque élément dans un nouveau tableau, comme illustré dans le code ci-dessus. Cela crée un nouveau tableau en mémoire, de sorte que les modifications apportées à un tableau n'affectent pas l'autre.
Cela introduit les concepts de copie superficielle et de copie profonde. Une copie superficielle ne copie que la référence du tableau, et non les éléments eux-mêmes. Une copie profonde crée un nouveau tableau et copie chaque élément, ce qui donne deux tableaux indépendants.
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)); } } }
Cet exemple de code illustre ce qui se produit lors d'une copie superficielle d'un tableau en C#. Lorsque vous assignez une variable de tableau à une autre, comme int[] shallow = numbers;, vous ne créez pas un nouveau tableau ni ne copiez les éléments. Au lieu de cela, les deux variables, numbers et shallow, pointent vers le même tableau en mémoire. Cela signifie que toute modification effectuée via l'une des variables sera visible via l'autre.
Une copie superficielle copie la référence du tableau, de sorte que les deux variables pointent vers le même emplacement mémoire. Une copie profonde crée un nouveau tableau et copie tous les éléments, rendant ainsi les tableaux indépendants.
1. Que se passe-t-il lorsque vous assignez une variable de tableau à une autre en C# ?
2. Comment créer une véritable copie d'un tableau ?
3. Pourquoi est-il important de comprendre la mémoire des tableaux lors de la manipulation des données ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion