Array、List
這部分基本上都是檢查我筆記的那位給的
然後我自己再整理過一次
=======================================================
這裡要注意的是,陣列或List傳入時,其實是傳入陣列指標的值
所以當你存取陣列的元素時,實際上是存取到同樣的值
int[] a = new int[] { 2, 3 };
PassArrayByValue(a);
void PassArrayByValue(int[] a) <= 傳入陣列指標的值
{
a[1] = 4; <= 透過陣列位址去存取陣列的元素
}
Debug.Log(a[0] + "," + a[1]); 輸出: 2,4
因為即便傳入的是陣列的值,但是這個值其實是指向陣列位址的值 而不是整個陣列的值
所以當Function透過陣列位址去存取陣列的元素時還是會取得實際的變數
=======================================================
但當我的Function是要直接設定陣列的位址時 此時使用callByValue則不會將傳入的值修改
int[] a = new int[] { 2, 3 };
PassArrayByValue2(a);
void PassArrayByValue2(int[] a)
{
a = new int[2] { 1, 2 }; <= 直接設定陣列的位址
}
Debug.Log(a[0] + "," + a[1]); 輸出: 2,3 <= 不會將傳入的值修改(call by value
=======================================================
相反的 如果傳入的方式改用callByReference,就有可能被直接修改陣列的指向
int[] a = new int[] { 2, 3 };
PassArrayByRef(ref a);
void PassArrayByRef(ref int[] a)
{
a = new int[2] { 1, 2 };<= 直接設定陣列的位址
}
Debug.Log(a[0] + "," + a[1]); 輸出: 1,2<= 直接修改陣列的指向(call by reference
=======================================================
List 同 array
List<int> list = new List<int>() { 6, 7 };
Debug.Log(list[0] + "," + list[1]); 輸出: 6,7
PassList(list);
void PassList(List<int> list)
{
list[1] = 9;
}
Debug.Log(list[0] + "," + list[1]); 輸出: 6,9
=======================================================
陣列的傳入有點複雜,那位親戚說不好這樣不好說明
之後有時間會再詳細跟我講一次
所以我之後會還再弄一次筆記...應該