Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Cópia de Arrays e Memória | Array Manipulation and Sorting
Arrays em C#

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

Program.cs

12345678910111213141516171819202122232425262728293031
namespace 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

Program.cs

1234567891011121314151617
namespace 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.

Note
Definição

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?

question mark

O que acontece quando você atribui uma variável de array a outra em C#?

Selecione a resposta correta

question mark

Como você pode criar uma cópia verdadeira de um array?

Selecione a resposta correta

question mark

Por que é importante entender a memória de arrays ao manipular dados?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 3. Capítulo 5
some-alt