我想能夠存儲對數組的引用,但不確定是否需要指針或從何處開始。我正在尋找類似於使用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