創作內容

17 GP

【筆記】call type 第二部份

作者:樂小呈│2020-02-23 17:14:09│巴幣:37│人氣:1249
筆記 call type 第二部份

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
=======================================================
陣列的傳入有點複雜,那位親戚說不好這樣不好說明
之後有時間會再詳細跟我講一次

所以我之後會還再弄一次筆記...應該

//
會有這兩ㄍ筆記的原因是因為我之前問了一個問題

這兩種更改List的寫法有什麼差別嗎?
第二種寫法會比第一種好嗎?

List <int> listA;

SortIntegerList(listA);
void SortIntegerList(List <int> setList)
{
      需要setList的計算...
      setList = 計算結果 (List.Add()
}
//
List <int> listA;

listA = SortIntegerList(listA);
List <int>  SortIntegerList(List <int> setList)
{
      需要setList的計算...
      return 計算結果  (List.Add()
}

他回答了之後,說我可以去稍微看一下傳值呼叫和傳參考呼叫的差別
於是就有這兩篇筆記ㄌ

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4695166
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:程式|筆記

留言共 1 篇留言

楓之焰
哦哦學到了 我一直沒去注意這個

02-23 20:47

樂小呈
窩之前也不知道02-23 20:54
我要留言提醒:您尚未登入,請先登入再留言

17喜歡★angus945 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【筆記】call typ... 後一篇:【紀錄】自製Tile M...

追蹤私訊切換新版閱覽

作品資料夾

d88931122所有巴友
老僧的Steam遊戲新作《蘿莉RACING》特價中,歡迎參考 : https://store.steampowered.com/dev/alex94i60看更多我要大聲說昨天21:32


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】