Простой код создания массива в Pascal:
var a,b: array[1..3] of integer; i:integer; begin for i:=1 to 3 do a[i]:=i; b:=a; b[1]:=3; writeln(a[1]); writeln(b[1]); end.
И тот же код только в C#
int[] a = { 1, 2, 3 }; int[] b = new int[3]; b = a; b[0] = 3; foreach (int item in a) Console.Write(String.Format("{0,3}", item)); Console.WriteLine(); foreach (int item in b) Console.Write(String.Format("{0,3}", item));
Но в C# a[0] = 3, а вот в Pascal a[0]=1.
Почему же так?
В C# мы присвоили указатель a указателю b, соответственно два указателя ссылаются на один объект.
В итоге, чтобы скопировать объект в C# нужно писать так:
b = (int[])a.Clone();
Добавить комментарий