Cópia de Arrays e Memória
Deslize para mostrar o menu
Ao trabalhar com arrays em C#, é importante entender como eles são armazenados na memória e o que acontece ao copiá-los ou atribuí-los. Arrays em C# são tipos de referência, o que significa que as variáveis armazenam uma referência (ou ponteiro) para onde os dados do array estão na memória, e não os dados propriamente ditos. Isso tem implicações significativas ao atribuir uma variável de array a outra ou ao desejar fazer uma cópia real do conteúdo de um array. Se esses detalhes forem ignorados, alterações podem ser feitas em locais não intencionados, resultando em bugs difíceis de identificar.
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)); } } }
Ao atribuir uma variável de array a outra, ambas passam a apontar para o mesmo local na memória. Isso significa que qualquer alteração feita por meio de uma variável aparecerá na outra, pois são apenas duas referências ao mesmo array. Para evitar isso, é necessário copiar cada elemento para um novo array, como mostrado no código acima. Isso cria um novo array na memória, de modo que alterações em um array não afetam o outro.
Isso introduz os conceitos de cópia superficial e cópia profunda. Uma cópia superficial copia apenas a referência do array, não os elementos em si. Uma cópia profunda cria um novo array e copia cada elemento para ele, resultando em dois arrays independentes.
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)); } } }
O exemplo de código demonstra o que acontece ao realizar uma cópia superficial de um array em C#. Quando você atribui uma variável de array a outra, como em int[] shallow = numbers, não está criando um novo array nem copiando os elementos. Em vez disso, ambas as variáveis, numbers e shallow, apontam para o mesmo array na memória. Isso significa que qualquer alteração feita por meio de uma variável será visível pela outra.
Uma cópia superficial copia a referência do array, fazendo com que ambas as variáveis apontem para o mesmo local na memória. Uma cópia profunda cria um novo array e copia todos os elementos, tornando os arrays independentes.
1. O que acontece quando você atribui uma variável de array a outra em C#?
2. Como você pode criar uma cópia verdadeira de um array?
3. Por que é importante entender a memória de arrays ao manipular dados?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo