我想能够存储对数组的引用,但不确定是否需要指针或从何处开始。我正在寻找类似于使用ref的函数,但是在一个变量中。以C#存储数组的位置
回答
假设有一个数组:
int[] a = new int[42];
可变a
是到阵列的引用。你可以让一个又一个这样的:
int[] b = a;
现在a
和b
指同一阵列。
你可以像这样的值赋给一个元素:
a[0] = 666;
,然后使用其他参考看到相同的价值:
Debug.Assert(b[0] == 666);
什么将此归结为是事实上,数组是reference types。所以赋值运算符将引用复制到对象,并且不会复制对象本身。与value types对比,例如,结构体,为其赋值操作符复制对象的值。
我觉得它的工作就是这样。假设b = a只会将a中的所有数据复制到b中。现在就试试,谢谢! – Zshelley
@Zshelley数组是引用类型..因此,引用被复制..而不是他们引用的数据。 –
副本仅适用于值类型。引用类型变量(所有对象)是指向堆中对象的指针 - 在C#中,它们看起来不像指针。在David的例子中,a和b是指针。但是,int a = 1; int b = a; (int是一个值类型)用值1的单独副本定义两个变量。您需要清楚地理解值和引用类型之间的差异。 –
如果您想存储对数组的引用,因为它们是引用类型,所以不需要使用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';
你也可以存储到一个列表的引用,因为他们'reference types(正如@DavidHeffernan指出的那样)像数组一样,使用相同的过程。
- 1. 数组存储在C中的位置?
- 2. 存储值,以结构数组值C
- 3. 以两位数的整数数组,并存储为两个单数位整数
- 4. k2组件将数据存储在数据库中的位置?
- 5. 存储Google位置SQLite中的位置
- 6. 存储器位置,以及范围
- 7. PYTHONPATH存储位置
- 8. 数组是否以相反的顺序存储在C/C++中?
- 9. 获取div的存储在数组x,y的位置
- 10. 如何存储1000位数字的C++?
- 11. 在整数数组中存储位图
- 12. 在iPhone中存储数据的位置?
- 13. 数据将由BigQuery存储的位置
- 14. FIRUserProfileChangeRequest存储数据的位置
- 15. Firefox扩展存储数据的位置?
- 16. 成员函数的存储位置?
- 17. 存储元数据的位置
- 18. Excel api,但存储数据的位置
- 19. 存储MySql表数据的位置(Mac)?
- 20. 将元素的完整位置存储在多维数组中以便重用
- 21. C数组的随机数存储
- 22. 如何使用MIPS数组在特定位置存储数据?
- 23. unordered_map的存储位置
- 24. mongodb的存储位置
- 25. 虚表的存储位置
- 26. EC2 instace存储的位置
- 27. 创建存储按钮点击位置的数组
- 28. 缓存数据的存储位置以及如何查询数据?
- 29. 使用数组存储引脚位
- 30. Sprites,在数组中存储位图
你是指“二维数组”还是“散列表”? – zey
你的意思是你想要两个或多个变量指向同一个数组? –
我的意思是我有一个数组,我需要能够在运行中访问它。它不在我需要访问它的范围之外,我不想复制它。我希望能够存储对该数组的引用,以便我可以通过它访问它。 – Zshelley