我希望能够存储对数组的引用,但不确定指针是否必要或从何处开始。我正在寻找类似于使用带函数的ref的功能,但是在变量中。
答案 0 :(得分:4)
假设你有一个数组:
int[] a = new int[42];
变量a
是对数组的引用。你可以制作另一个这样的:
int[] b = a;
现在a
和b
引用相同的数组。
您可以为这样的元素指定一个值:
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正确指出的那样),就像数组一样,具有相同的过程。