将数组的位置存储在C#中

时间:2014-01-15 09:25:41

标签: c# arrays pointers

我希望能够存储对数组的引用,但不确定指针是否必要或从何处开始。我正在寻找类似于使用带函数的ref的功能,但是在变量中。

2 个答案:

答案 0 :(得分:4)

假设你有一个数组:

int[] a = new int[42];

变量a是对数组的引用。你可以制作另一个这样的:

int[] b = a;

现在ab引用相同的数组。

您可以为这样的元素指定一个值:

a[0] = 666;

然后使用另一个引用看到相同的值:

Debug.Assert(b[0] == 666);

这归结为数组是reference types的事实。因此赋值运算符复制对象的引用,而不复制对象本身。将其与value types进行对比,例如结构,赋值运算符复制对象的值。

答案 1 :(得分:0)

如果要将引用存储到数组中,则不需要使用高级语言(如C#)的指针(对内存位置的引用),因为它们是引用类型。所有引用类型变量都像指针一样工作,但是在C#等高级语言中引用内存位置的过程是完全自动的,并且对用户是隐藏的。

我已经回答了有关指针的问题(在Java中)here。即使语言不同,Java也是一种高级语言,如C#,引用内存位置的过程也是类似的。

关于你的问题,如果你有这样的数组:

int[] myArray = new int[2];

你可以将它的引用存储在另一个数组中:

int[] myStoredArrayRef = myArray;

现在,这两个对象指的是同一个数组,因为它们指的是内存中相同的“位置”(您复制了它的引用)。实际上,如果以这种方式修改myArray的元素:

myArray[0] = 123;

myStoredArrayRef的元素也将改变:

Console.WriteLine(myStoredArrayRef[0]); //it will print '123';

您还可以存储对List的引用,因为它们是reference types(正如@DavidHeffernan正确指出的那样),就像数组一样,具有相同的过程。